1

看起来很简单,但我不知道为什么它不起作用。

在我的 .h 文件中,我声明:BOOL keyboardIsUp;

然后在我的 .m 文件中:

-(void)keyboardWillShow {

    NSLog(@"before:");
    NSLog(keyboardIsUp? @"Yes" : @"No");

    NSLog(@"keyboardWillShow");
    keyboardIsUp = YES;

    NSLog(@"after:");
    NSLog(keyboardIsUp? @"Yes" : @"No");

    ...
}

-(void)keyboardWillHide {

    NSLog(@"before:");
    NSLog(keyboardIsUp? @"Yes" : @"No");

    NSLog(@"keyboardWillHide");
    keyboardIsUp = NO;

    NSLog(@"after:");
    NSLog(keyboardIsUp? @"Yes" : @"No");

    ...
}

-(BOOL)keyboardStatus{
    NSLog(@"keyboardStatus");

    NSLog(keyboardIsUp? @"Yes" : @"No");

    return keyboardIsUp;
}

这些方法肯定被正确调用(我可以从 NSLog 消息中看到这一点),并且NSLog在前 2 个方法中使用我的消息,我可以看到 BOOL 设置正确(在函数范围内)。

但是当我打电话时keyboardStatus,它总是记录“NO”

有任何想法吗?我已经搜索了我的其余代码,我绝对不会改变keyboardIsUp其他任何地方的价值。

4

2 回答 2

2

您确定您正在与对象的正确实例交谈吗?

即添加到每个方法的开头:

NSLog(@"[%@(%p) %@]", self, self, NSStringFromSelector(_cmd));

如果十六进制数在keyboardWillHide/Show和之间变化keyboardStatus,那么您正在与不同的实例交谈。如果没有,则正在发生其他事情。

于 2012-08-15T17:12:17.080 回答
1

也许您没有在同一个对象上调用它们?

于 2012-08-15T17:12:26.293 回答