【发布时间】:2015-09-04 20:53:22
【问题描述】:
我在 iOS 9 中遇到了一个非常不幸的错误。似乎当您设置 UITextField.inputAccessoryView 时,该视图的 viewWillDisappear: 和 viewDidDisappear: 方法被过早调用(就在键盘完成动画时)。
我已经包含了一个 gif 来演示这个问题。当视图变为红色时,它的viewWillDisappear: 方法已被调用。奇怪的是,当您关闭键盘时,viewWillDisappear: 和 viewDidDisappear: 会再次被调用。但是,viewWillAppear: 只被调用一次。
有没有人遇到过类似的问题?我使用viewWillDisappear: 和viewDidDisappear: 来关闭控制器,显然提前调用会导致不必要的行为。
注意:下面是我如何创建和设置附件视图。 AccessoryViewController.m 中没有什么值得注意的。在一个干净的项目中重现了这个问题。它在 iOS 8 上不存在。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
if (self.textField.inputAccessoryView == nil) {
self.textField.inputAccessoryView = self.vc.view;
}
return YES;
}
- (UIViewController *)vc {
if (!_vc) _vc = [[AccessoryViewController alloc] init];
return _vc;
}
【问题讨论】:
-
我的一个 inputAccessoryViews 看到了同样的情况
-
iOS 9 GM 种子中仍然存在问题。我已经采用了一种解决方法,它在 UITextFieldDelegate 的
textFieldDidEndEditing:方法的 inputAccessoryView 上设置了一个 BOOL。然后在我的viewWillDisappear:和viewDidDisappear:方法中,我在关闭控制器之前检查 BOOL 是否已设置。
标签: ios objective-c ios9 inputaccessoryview ios-9-beta5