代码之家  ›  专栏  ›  技术社区  ›  Duck

将通知转发到另一个类

  •  0
  • Duck  · 技术社区  · 16 年前

    我在用这个方法

    - (void)keyboardWillShow:(NSNotification *)notification
    

    当键盘显示时触发。

    当这个方法被触发时,它会收到一个包含几个键盘参数的通知,如动画持续时间、动画曲线和帧。我需要将此通知及其所有参数转发到另一个类。所以,我试着在键盘里面做这个会显示:

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

    dosomething通知在另一个类上运行dosomething方法,其格式如下:

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

    但是当我试图读取这个其他类的通知值时,例如,

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

    我得到所有值的0。通知正在丢失其参数并且未被转发。我该怎么做?

    谢谢。

    1 回复  |  直到 15 年前
        1
  •  4
  •   Jason Coco superfell    16 年前

    它正在丢失所有的值,因为您在创建新通知时传递了nil!如果要使其工作,必须传递键盘通知的用户信息字典。所以:

    [[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
    

    尽管如此,我还是想让另一个类自己监听键盘通知。