UITextField becomeFirstReponder方法不起作用且返回false。

6 浏览
0 Comments

UITextField becomeFirstReponder方法不起作用且返回false。

我在代码中有3个文本字段的出口,如下所示:

@IBOutlet var oldPasswordTextField: UITextField! { didSet { oldPasswordTextField.delegate = self } }

@IBOutlet var newPasswordTextField: UITextField! { didSet { newPasswordTextField.delegate = self } }

@IBOutlet var confirmPasswordTextField: UITextField! { didSet { confirmPasswordTextField.delegate = self } }

在我的textFieldShouldReturn委托方法中,我希望在点击返回键时将下一个文本字段设置为第一个响应者,如下所示:

func textFieldShouldReturn(textField: UITextField) -> Bool { //委托方法

textField.resignFirstResponder()

if textField == oldPasswordTextField

{

newPasswordTextField.becomeFirstResponder()

}

else if textField == newPasswordTextField

{

confirmPasswordTextField.becomeFirstResponder()

}

else

{

saveButtonTapped()

}

return true

}

但它没有起作用。所以我试着检查出了什么问题。所以我尝试了这个:

func textFieldShouldReturn(textField: UITextField) -> Bool { //委托方法

if textField.canResignFirstResponder()

{

print("textField can resign first responder")

if textField.resignFirstResponder() == true

{

print("textField resigned first responder")

}

else

{

print("textField didnt resign first responder")

}

}

else

{

print("textField cant resign first responder")

}

if textField == oldPasswordTextField

{

if newPasswordTextField.canBecomeFirstResponder() == true

{

if newPasswordTextField.becomeFirstResponder() == true

{

print("newPassword field has become first responder")

}

else

{

print("newPassword field cannot become first responder")

}

}

}

else if textField == newPasswordTextField

{

confirmPasswordTextField.becomeFirstResponder()

}

else

{

saveButtonTapped()

}

return true

}

每次我在控制台上得到"textField cant resign first responder"和"newPassword field cannot become first responder"。我不知道出了什么问题。为什么canResignFirstResponder()方法和becomeFirstResponder()方法返回false?有什么帮助吗?

0
0 Comments

问题出现的原因是在代码中的'textFieldShouldEndEditing'方法返回了false,导致resignFirstResponder方法也返回了false,从而使得becomeFirstResponder方法无法正常工作。解决方法是将'textFieldShouldEndEditing'方法的返回值改为true。

0
0 Comments

问题出现的原因是在调用`becomeFirstResponder()`方法时返回了false。这可能是由于找不到下一个响应者造成的。

解决方法是使用标签来标识文本字段,然后根据标签找到下一个响应者。如果找到了下一个响应者,则调用`becomeFirstResponder()`方法将焦点设置到下一个文本字段上。如果找不到下一个响应者,则调用`resignFirstResponder()`方法移除键盘。

下面是用Objective-C和Swift编写的示例代码:

Objective-C:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    NSInteger nextTag = textField.tag + 1;
    // 尝试找到下一个响应者
    UIResponder *nextResponder = [textField.superview viewWithTag:nextTag];
    if (nextResponder) {
        // 找到下一个响应者,将焦点设置到下一个文本字段上
        [nextResponder becomeFirstResponder];
    } else {
        // 找不到下一个响应者,移除键盘
        [textField resignFirstResponder];
    }
    return NO; // 不希望UITextField插入换行符
}

Swift:

func textFieldShouldReturn(textField: UITextField!) -> Bool {

let nextTag = textField.tag + 1

// 尝试找到下一个响应者

if let nextResponder = textField.superview?.viewWithTag(nextTag) as UIResponder? {

nextResponder.becomeFirstResponder()

} else {

// 找不到下一个响应者,移除键盘

textField.resignFirstResponder()

}

return false // 不希望UITextField插入换行符

}

我在这里找到了解决方案:[Switching between Text fields on pressing return key in Swift](https://stackoverflow.com/questions/31766896)

希望这些解决方法能帮助你解决问题。如果`nextResponder.becomeFirstResponder()`返回false,请检查是否正确设置了标签,并确保找到了下一个响应者。

0