textFieldShouldReturn 无法在 swift 3 中将焦点从一个文本字段更改为另一个文本字段

Posted

技术标签:

【中文标题】textFieldShouldReturn 无法在 swift 3 中将焦点从一个文本字段更改为另一个文本字段【英文标题】:The textFieldShouldReturn is not working to change focus from one textfield to another in 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 委托是否在按下返回按钮后调用? 【参考方案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

【讨论】:

以上是关于textFieldShouldReturn 无法在 swift 3 中将焦点从一个文本字段更改为另一个文本字段的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中未调用 textFieldShouldReturn

未调用 textFieldShouldReturn

TextFieldShouldReturn 未被调用

在自定义 UITableCell 中从 UITextField 调用 textFieldShouldReturn 时遇到问题

从 UIBarButtonItem 触发 textFieldShouldReturn

textFieldShouldReturn - completionHandler 中的某些方法永远不会被调用