iOS 9中InputAccessoryView的viewWillDisappear方法提前调用。

3
我在iOS 9中遇到了一个非常不幸的bug。当你设置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;
}

enter image description here


我在我的一个inputAccessoryViews上看到了同样的事情。 - Jonathan Julian
在iOS 9 GM种仍然存在问题。我采用了一种解决方法,即在UITextFieldDelegate的textFieldDidEndEditing:方法中设置一个输入附件视图上的BOOL值。然后在我的viewWillDisappear:viewDidDisappear:方法中,我会检查该BOOL值是否已设置,然后再关闭控制器。 - Matt
1个回答

0

AccessoryViewController没有被强引用在ViewController上。将其存储在实例变量中,以避免被清除。

我的解决方案(Swift):

var accessoryView: AccessoryViewController! // 可行

weak var accessoryView: AccessoryViewController!


我已经强引用了 UIViewController 。而且,UITextFieldinputAccessoryView 也在强引用那个 UIViewController 的视图,所以它不应该被释放。 - Matt
我遇到了这个问题,可惜这个解决方案对我不起作用。 - Glen T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接