2010-08-01 18 views
0

当键盘出现时,我的代码完美工作以减小UITextView的大小。问题是,该方法的签名是神秘:keyboardDidShow被称为,但它不是有线

- (void)keyboardDidShow:(NSNotification*)aNotification 

但调用代码

//[nc addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; 

被注释掉了!我在XCode中使用grep和重构搜索低和高(以查看还有谁可能调用该方法),并且什么都没有出现。我已经检查过笔尖以防万一。我曾尝试清洁目标等,但无济于事。如果我重命名方法,它不会被调用(但这不会产生错误)。关于这种方法如何“有线”的任何想法?

+0

你可以'NSLog'通知对象吗? – Joost 2010-08-01 17:37:36

+0

@JoostK,我检查了NSNotification对象,它只是'NSConcreteNotification'的一个实例,但没有什么有趣的。 – 2010-08-01 17:57:44

+1

然后很奇怪。这个方法在什么类中实现?我想'UIViewController'子类?我创建了一个测试项目并在视图控制器中实现了这个方法,但没有被调用,所以它看起来并没有被UIKit调用。你是否已经完成了对UIKeyboardDidShowNotification项目的全面搜索?你说你重命名方法时没有错误,但是你在你的Build Settings中启用了'GCC_WARN_UNDECLARED_SELECTOR'吗? – Joost 2010-08-01 23:32:27

回答

1

因此事实证明,您在UITextField子类中实施了keyboardDidShow:。然而,UITextField类本身也实现了这种方法,所以既然你已经在你的子类中覆盖了它,你的实现将被调用,而不是UIKit一个。即使从未在你的代码中调用它,UIKit为你做了。

因此,这解释了为什么您的方法被调用,并重命名该方法解决了问题。

+0

很棒的答案,谢谢! – 2010-08-02 13:11:19

+0

我不确定它何时发生了变化,但'UITextField'中不再有未公开的'keyboardDidShow:'方法。我已经用iOS 8.3测试过了。 – Daniel 2015-05-10 23:30:43