我正在使用这种方法
- (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];
我为所有值获得零。通知正在丢失其参数而未被转发。我怎么能这样做?
感谢。
答案 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
尽管如此,我想我会让其他班级自己听一下键盘通知。