2010-04-18 53 views
0

我用這個方法轉發通知到另一個類

- (void)keyboardWillShow:(NSNotification *)notification 

在觸發鍵盤顯示時。

當此方法被觸發時,它會收到一個包含有關鍵盤的多個參數的通知,如動畫持續時間,動畫曲線和幀。我需要將此通知及其所有參數轉發給另一個類。於是,我試着做這裏面keyboardWillShow:

[[NSNotificationCenter defaultCenter] 
postNotificationName:@"doSomething" object:notification userInfo:nil]; 

的DoSomething的通知運行DoSomething的方法在另一個類,它有以下形式:

- (void) doSomething:(NSNotification *)notification { 

但是當我嘗試讀取通知使用例如

myRect = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 

我獲得所有值的零。通知正在丟失其參數並且未被轉發。我怎樣才能做到這一點?

謝謝。

回答

4

它正在失去所有值,因爲您在創建新通知時通過了nil!如果你想讓它工作,你必須傳遞鍵盤通知的userInfo字典。所以:

[[NSNotificationCenter defaultCenter] 
postNotificationName:@"doSomething" object:self userInfo:userInfo]; 

在這種情況下,創建此通知的對象是此對象。如果您希望顯示爲來自鍵盤對象,則發送[notification object]作爲對象,但我不建議這樣做。另外,爲什麼不簡單地讓你想要回應這些通知的班級還要聽取鍵盤通知?從鍵盤通知回調中創建和發送新通知對我來說似乎有點圓滿。另一種選擇是創建一個委託風格的事情,其中​​類(我假設一個視圖控制器或什麼?)實際監聽鍵盤通知,然後調用一個委託對象(你想轉發這個信息的其他類)和將userInfo字典直接傳遞給它。所以:

// Assume a proper delegate is set and it responds to - (void)doSomething:(NSDictionary*)userInfo 
[delegate doSomething:userInfo]; // from within the keyboard notification 

儘管如此,我想我只想讓這個其他類監聽鍵盤通知本身。

+0

thanksssssssssss !!!!而已!這個類處理通知,但其他類也必須處理它,因爲一些清理操作必須在這個類之外完成。 – SpaceDog 2010-04-18 19:11:34