将通知转发给另一个类

时间:2010-04-18 18:15:36

标签: iphone iphone-sdk-3.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];

我为所有值获得零。通知正在丢失其参数而未被转发。我怎么能这样做?

感谢。

1 个答案:

答案 0 :(得分: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

尽管如此,我想我会让其他班级自己听一下键盘通知。