• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 将第一响应者从 uitextfield 更改为 uitextview [iOS 7] 时出现死锁

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:45:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

这里有一个非常奇怪的问题,这在 iOS 7 之前没有发生过......

我在我创建的表单中有一个 uitextfield 和 uitextview...问题是如果用户将文本字段作为第一响应者然后点击 uitextview 会发生死锁,内存将增加直到看门狗杀死我的应用程序。 .

当我从 uitextview 更改为 uitextfield 时,不会发生这种情况

相关代码:

#pragma mark - UITextView Delegate
-(BOOL)textViewUITextView *)textView shouldChangeTextInRangeNSRange)range replacementTextNSString *)text {

if ([text isEqualToString"\n"]) {
    [textView resignFirstResponder];
}

NSUInteger newLength = [textView.text length] + [text length] - range.length;

return (newLength > 120) ? NO : YES;

}

-(void)textViewDidEndEditingUITextView *)textView {

if (textView.tag == CreatePlaceElementDescription) {
    self.marker.info = textView.text;
}
else if (textView.tag == CreatePlaceElementAddress) {
    self.marker.address = textView.text;
}
}

#pragma mark - UITextField Delegate
- (BOOL)textFieldUITextField *)textField shouldChangeCharactersInRangeNSRange)range replacementStringNSString *)string {

if ([string isEqualToString"\n"]) {
    [textField resignFirstResponder];
}

NSUInteger newLength = [textField.text length] + [string length] - range.length;

//Limit name textfield length
return (newLength > 60) ? NO : YES;
}

-(void)textFieldDidEndEditingUITextField *)textField {

if (textField.tag == CreatePlaceElementName) {
    self.marker.name = textField.text;
}

}

没有什么比这更重要的了......

如果我先让第一响应者辞职,这个问题不会发生,但它会让用户点击 textview 两次,这是不希望的..

在 textview:didEndEditing 上也发生了死锁,(好像 textview 是退出键盘而不是 textfield 的那个,textfield:didEndEditing 也被调用).. textview:didEndEditing 不应在任何地方调用

这真的让我大吃一惊……有什么建议吗?



Best Answer-推荐答案


我只是通过修改 DAKeyboardControl.m 中的 inputKeyboardDidShow 方法来修复它,如下所示:

- (void)inputKeyboardDidShow
{
    // Grab the keyboard view
    if(self.keyboardActiveInput.inputAccessoryView.superview){
        self.keyboardActiveView = self.keyboardActiveInput.inputAccessoryView.superview;
        self.keyboardActiveView.hidden = NO;
    }

    // If the active keyboard view could not be found (UITextViews...), try again
    if (!self.keyboardActiveView) {
        // Find the first responder on subviews and look re-assign first responder to it
        [self reAssignFirstResponder];
    }
}

关于ios - 将第一响应者从 uitextfield 更改为 uitextview [iOS 7] 时出现死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18934776/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap