1

我必须始终为 a 辞职FirstResponderUITextView吗?或者,当它的视图控制器消失时,这会自动发生吗?

我之所以问,是因为我遇到了与iPhone Objective-C 类似的问题:Keyboard won't hide with resignFirstResponder,有时,即使导航控制器推动并弹出其他视图控制器,键盘也会保持向上。键盘工作,当我点击完成时,它没有聚焦UITextView(即光标消失),但键盘保持不变。

我从来不知道为什么会这样,但也许是因为resignFirstResponder在推送另一个视图控制器之前没有做,但我认为它是可选的?

4

4 回答 4

2

总而言之, UITextView 有一个对视图控制器的引用(作为它的委托),但不保留它。当您转到下一个屏幕时,控制器被释放,然后 UITextView(可能已被其他东西保留)尝试回调释放的控制器并崩溃。当您调用 时resignFirstResponder,您会颠倒发生这种情况的顺序,因此不会崩溃。

textView.delegate = nil在视图控制器的方法中添加调用的dealloc方法 - 显然在释放文本视图之前放置它。

于 2011-06-18T23:48:16.370 回答
1

我认为您不必这样做,因为Xcode Sample UICatalogUITextField在弹出resignFirstResponder之前不会调用。TextViewController

键盘卡住的原因是我让同一个视图控制器以模态方式同时呈现两个视图控制器,一个接一个。UIKit不喜欢那样。

于 2011-06-25T19:24:58.023 回答
1

UITextView 与其委托之间的合同规定,当文本视图完成编辑时,委托将发送 -resignFirstResponder 。这会通知框架视图已完成编辑,触发与此相关的事件(willEndEditing 和 didEndEditing),并允许响应者层次结构的其他部分做出相应的反应。不这样做可能会起作用,但它没有遵守它同意的合同(这就是协议的全部内容)。

于 2011-06-24T20:32:38.713 回答
0

调用resignFirstResponder确保该text属性包含控件中显示的实际文本。

根据状态,这并不总是必要的,但如果您的控件已让第一响应者辞职,您就知道您正在使用有效数据。

于 2011-06-19T10:57:24.497 回答