【问题标题】:The textFieldShouldReturn is not working to change focus from one textfield to another in swift 3textFieldShouldReturn 无法在 swift 3 中将焦点从一个文本字段更改为另一个文本字段
【发布时间】:2017-01-02 11:44:11
【问题描述】:

当单击 IOS 键盘上的下一个按钮时,我所做的一切都是为了将​​更改焦点从一个 textField 应用到另一个,但它不起作用。

我从布局和代码中为每个 textFieldViewController 设置委托。

class ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var usernameTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
    usernameTextField.delegate = self
    passwordTextField.delegate = self

}


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

    textfield.resignFirstResponder()

    if (textfield == self.usernameTextField) {
        self.usernameTextField.becomeFirstResponder()

    }
    else if (textfield == self.passwordTextField) {
        self.passwordTextField.becomeFirstResponder()

    }

    return true


}

在这种情况下有什么问题?

【问题讨论】:

  • 是 textFieldShouldReturn 调用吗?
  • 应该在哪里调用?
  • 我在问..这个方法调用了吗? textFieldShouldReturn
  • 请参考下面我的回答...如果不行请告诉我..
  • 您的 textFieldShouldReturn 委托是否在按下返回按钮后调用?

标签: ios swift swift3 uitextfield


【解决方案1】:

您正在使用 Swift 3 并且 UITextFieldDelegate 方法的签名已更改,因此您需要将 _ 作为第一个参数标签传递。所以你的方法textFieldShouldReturn(_:)应该是这样的。

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
    if (textfield == self.usernameTextField) {
         self.passwordTextField.becomeFirstResponder()
    }
    else {
         textfield.resignFirstResponder()
    }
    return true
}

【讨论】:

  • else条件什么时候执行?
  • 哦.. 但他只有两个文本字段
  • @SamahAhmed 你有没有更换你的方法并尝试我的方法?
  • @SamahAhmed 您需要像我的回答一样在您的方法中添加_ 作为第一个参数标签,再次正确检查答案。
  • @NiravD 是的,给我使用未解析的标识符“文本字段”,当放置 _ 文本字段时也不起作用
【解决方案2】:

我已经按照你的要求更新了

尝试使用:

func textFieldShouldReturn(textfield: UITextField!) -> Bool
{
    if (textfield == self.usernameTextField) {
        self.passwordTextField.becomeFirstResponder()
    }
    else if (textfield == self.passwordTextField) {
        textfield.resignFirstResponder()
    }
    return true
}

由于对 resignFirstResponder 的调用,keyboard 正在被关闭。它与 textFieldShouldReturn 的返回值无关。这就是为什么需要在令人满意的条件下写作。

【讨论】:

  • 它不适用于 OP,因为 OP 正在使用 Swift 3,这就是 textFieldShouldReturn 没有被 OP 调用的原因。
  • 什么是OP!我试过你的答案,它也不起作用
  • 我不知道... :)
  • 您是否检查了情节提要中连接的插座和委托?
  • @SamahAhmed Here OP(Original Poster) 表示你。
【解决方案3】:

如果 textFieldShouldReturn 被调用,那么你必须这样写:

if (textfield == self.usernameTextField) 
{
    self. passwordTextField.becomeFirstResponder()
}

【讨论】:

    【解决方案4】:
    Try this...
    
    class ViewController: UIViewController, UITextFieldDelegate {
    var usernameTextField: UITextField!
    var passwordTextField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        usernameTextField.delegate = self
        passwordTextField.delegate = self
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func textFieldShouldReturn(textfield: UITextField!) -> Bool
    {
    
        if (textfield == self.usernameTextField) {
            self.usernameTextField.becomeFirstResponder()
    
        }
        else if (textfield == self.passwordTextField) {
            self.passwordTextField.resignFirstResponder()
    
        }
    
        return true
    }
    

    }

    【讨论】:

      猜你喜欢
      • 2018-08-30
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多