ios - UITextField पाठ कूदता है




swift (6)

मेरे पास 2 UITextField तत्वों के साथ ViewController : लॉगिन और पासवर्ड। मैं इन क्षेत्रों के लिए प्रतिनिधि सेट करता हूं, जिसमें नीचे दिए गए कोड शामिल हैं:

func textFieldShouldReturn(textField: UITextField) -> Bool {
    if textField === self.loginField {
        self.loginField.resignFirstResponder()
        self.passwordField.becomeFirstResponder()
        return false
    }

    return true
}

जब वह कीबोर्ड पर अगला बटन दबाता है तो इस तर्क को उपयोगकर्ता को लॉगिन पाठ क्षेत्र से पासवर्ड पर स्विच करना चाहिए। लेकिन मैं गड़बड़ के साथ फंस गया: के बाद

self.passwordField.becomeFirstResponder()

लॉगिन फ़ील्ड में पाठ ऊपरी बाएँ कोने और पीछे की ओर कूदता है। और क्या अधिक अजीब है: यह गड़बड़ केवल पहली बार पुन: पेश करता है, फिर आपको इस व्यवहार का निरीक्षण करने के लिए ViewController को फिर से बनाने की आवश्यकता है

यहां देखें glitch http://tinypic.com/player.php?v=6nsemw%3E&s=8#.VgVb3cuqpHx

मैंने इसे समाप्त किया:

func textFieldShouldReturn(textField: UITextField) -> Bool {
    if textField === self.loginField {
        self.loginField.resignFirstResponder()
        // Shitty workaround. Hi, Apple!
        self.loginField.setNeedsLayout()
        self.loginField.layoutIfNeeded()

        self.passwordField.becomeFirstResponder()
        return false
    }

    return true
}

UITextField में पाठ के कूदने से बचने के लिए इस कोड का उपयोग करें।

- (BOOL) textFieldShouldReturn:(UITextField *)textField{

      if(textField == self.txtUserName){
        [self.txtEmail becomeFirstResponder];
      }
      else if (textField == self.txtEmail){
        [self.txtPassword becomeFirstResponder];
      }
      else if (textField == self.txtPassword){
        [self.txtConfirmPassword becomeFirstResponder];
      }
      else if (textField == self.txtConfirmPassword){
        [self.txtFirstName becomeFirstResponder];
      }
      else{
        [textField resignFirstResponder];
      }

   return YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
   [textField resignFirstResponder];
   [textField layoutIfNeeded];
}

अधिक "सामान्य" विकल्प आपके UITextField उपवर्ग के अंदर सूचनाओं का उपयोग करना है:

 - (void)setupJumpingTextWorkaround {
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(forceLayout)
                                                 name:UITextFieldTextDidEndEditingNotification object:self];
}

- (void)forceLayout {
        [self setNeedsLayout];
        [self layoutIfNeeded];
    }

सदस्यता समाप्त करना न भूलें


मैं अपने पाठ फ़ील्ड प्रतिनिधियों को नहीं देता। इसके बजाय मैं एक IBAction बनाता हूं और इसे "डिड एंड ऑन एक्जिट" इवेंट में संलग्न करता हूं। गड़बड़ इस विधि के साथ भी होता है, लेकिन केवल iOS 9 में यह OS बग दिखता है।

मेरी कार्रवाई इस तरह दिखती है:

@IBAction func textFieldAction(sender: UITextField) {
    if sender === usernameField {
        passwordField.becomeFirstResponder()
    }
}

ऊपर के साथ, गड़बड़ होती है, लेकिन जब मैं नीचे करता हूं तो गड़बड़ दूर हो जाती है:

@IBAction func textFieldAction(sender: UITextField) {
    if sender === usernameField {
        sender.resignFirstResponder()
        passwordField.becomeFirstResponder()
    }
}

मुझे setNeedsLayout() को कॉल करने की आवश्यकता नहीं लगती है।


मैं भी इसी समस्या का सामना कर रहा हूं। नीचे दिया गया कोड मेरे लिए काम करता है।

func textFieldDidEndEditing(_ textField: UITextField) {

    textField.layoutIfNeeded()
}

UITextField उपवर्ग में आप निम्नलिखित कार्य कर सकते हैं:

-(BOOL)resignFirstResponder
{
    BOOL resigned = [super resignFirstResponder];
    [self layoutIfNeeded];
    return resigned;
}

यहाँ ट्रिक यह सुनिश्चित करने के लिए है कि आप layoutIfNeeded को कॉल करें। layoutIfNeeded को resignFirstResponder किया गया।

इसे इस तरह से करना काफी आसान है क्योंकि आपको प्रतिनिधि कॉलबैक में resignFirstResponder को कॉल करने की आवश्यकता नहीं है क्योंकि इससे मुझे UIScrollView अंदर समस्याएँ हुईं, हालांकि उपरोक्त नहीं है :)


func textFieldDidEndEditing(_ textField: UITextField) {

    textField.layoutIfNeeded()
}




uitextfield