菜鸟教程小白 发表于 2022-12-12 14:45:23

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


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

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

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

<p>相关代码:</p>

<pre><code>#pragma mark - UITextView Delegate
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {

if () {
    ;
}

NSUInteger newLength = + - range.length;

return (newLength &gt; 120) ? NO : YES;

}

-(void)textViewDidEndEditing:(UITextView *)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)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

if () {
    ;
}

NSUInteger newLength = + - range.length;

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

-(void)textFieldDidEndEditing:(UITextField *)textField {

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

}
</code></pre>

<p>没有什么比这更重要的了......</p>

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

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

<p>这真的让我大吃一惊……有什么建议吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我只是通过修改 DAKeyboardControl.m 中的 inputKeyboardDidShow 方法来修复它,如下所示:</p>

<pre><code>- (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
      ;
    }
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 将第一响应者从 uitextfield 更改为 uitextview 时出现死锁,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/18934776/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/18934776/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 将第一响应者从 uitextfield 更改为 uitextview [iOS 7] 时出现死锁