3

我在 iOS 9 中遇到了一个非常不幸的错误。似乎当您设置 a 时UITextField.inputAccessoryView,该视图viewWillDisappear:viewDidDisappear:方法被过早地调用(就在键盘完成动画时)。

我已经包含了一个 gif 来演示这个问题。当视图变为红色时,它的viewWillDisappear:方法已被调用。奇怪的是,当您关闭键盘viewWillDisappear:viewDidDisappear:再次调用时。但是,viewWillAppear:只调用一次。

有没有人遇到过类似的问题?我使用viewWillDisappear:andviewDidDisappear:来关闭控制器,显然提前调用会导致不需要的行为。

注意:下面是我如何创建和设置附件视图。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;
}

在此处输入图像描述

4

1 回答 1

0

The AccessoryViewController is not stored strongly on the ViewController. Store it in an instance variable so it does not get cleaned up.

My solution (Swift):

var accessoryView: AccessoryViewController! // works

vs

weak var accessoryView: AccessoryViewController!

于 2015-09-10T16:42:57.980 回答