UITextView adding new line unintentionally?

前端 未结 3 826
别跟我提以往
别跟我提以往 2020-12-03 09:31

I have a scroll view which contains a UITextField and a UITextView. The UITextField return key is \"Next\" and when this is pressed I call [myTextView becomeFirstResponder];

相关标签:
3条回答
  • 2020-12-03 10:15

    One solution to solve this is when you implement the textFieldShouldReturn: delegate method, be sure to return NO, and not YES. By returning NO, the newline isn't passed on to the text field.

    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
        // move to next field or whatever you need
        [myTextView becomeFirstResponder];
    
        return NO;
    }
    
    0 讨论(0)
  • 2020-12-03 10:33

    Similar idea to performSelector, but using asynchronous dispatch queue (Swift 4 version):

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
       textField.resignFirstResponder()
       DispatchQueue.main.async {
          self.myTextView.becomeFirstResponder()
       }
       return true
    }
    
    0 讨论(0)
  • 2020-12-03 10:37

    Okay, this behaviour is due to a bug in iOS when becoming firstresponder within same run loop by using next button. To over come this you should do this manually. First resign first responder from a textFied, and then make textView as a first responder. like this. Implement this delegate method.

    - (BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        [textField resignFirstResponder];
        [textView performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
        return YES;
    }
    
    0 讨论(0)
提交回复
热议问题