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
应用到另一个,但它不起作用。
我从布局和代码中为每个 textField
到 ViewController
设置委托。
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
在自定义 UITableCell 中从 UITextField 调用 textFieldShouldReturn 时遇到问题