luc*_*uez 60 iphone ios swift xcode6
我正在设计一个iOS应用程序,我希望在我的iPhone中按下返回键时,它会将我引导到下一个文本字段.
我发现了几个类似的问题,并且有很好的答案,但它们恰好都在Objective-C中,我正在寻找Swift代码,现在这就是我现在所拥有的:
func textFieldShouldReturn(emaillabel: UITextField) -> Bool{
return true
}
Run Code Online (Sandbox Code Playgroud)
它被放置在连接的文件和包含文本字段的UIView的控制器中,但我不确定这是不是正确的地方.
我基本上是新手,所以解释每一个小步骤,否则我会设法弄乱它.此外,我正在使用最新版本的Xcode,如果这有任何区别.
好的,所以我试了这个并得到了这个错误:
//could not find an overload for '!=' that accepts the supplied arguments
func textFieldShouldReturn(textField: UITextField) -> Bool {
let nextTag: NSInteger = textField.tag + 1
// Try to find next responder
let nextResponder: UIResponder = textField.superview!.viewWithTag(nextTag)!
if (nextResponder != nil) {
// could not find an overload for '!=' that accepts the supplied arguments
// Found next responder, so set it.
nextResponder.becomeFirstResponder()
} else {
// Not found, so remove keyboard.
textField.resignFirstResponder()
}
return false // We do not want UITextField to insert line-breaks.
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢好朋友!!
Cal*_*leb 132
Swift 3.0(检查以前版本的编辑历史记录):
class ViewController: UIViewController,UITextFieldDelegate {
// Link each UITextField (Not necessary if delegate and tag are set in Interface Builder)
@IBOutlet weak var someTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do the next two lines for each UITextField here or in the Interface Builder
someTextField.delegate = self
someTextField.tag = 0 //Increment accordingly
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
// Try to find next responder
if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField {
nextField.becomeFirstResponder()
} else {
// Not found, so remove keyboard.
textField.resignFirstResponder()
}
// Do not add a line break
return false
}
}
Run Code Online (Sandbox Code Playgroud)
确保您的UITextField代理已设置且标记正确递增.这也可以通过Interface Builder完成.
这是我发现的Obj-C帖子的链接:如何浏览文本字段(下一个/完成按钮)
Vin*_*ino 26
斯威夫特4
您可以轻松切换到另一个TextField.
UITextFieldDelegate和添加textFieldShouldReturn(_:)方法 delegateIBOutlet为所有TextField创建一个
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var txtFieldName: UITextField!
@IBOutlet weak var txtFieldEmail: UITextField!
@IBOutlet weak var txtFieldPassword: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == txtFieldName {
textField.resignFirstResponder()
txtFieldEmail.becomeFirstResponder()
} else if textField == txtFieldEmail {
textField.resignFirstResponder()
txtFieldPassword.becomeFirstResponder()
} else if textField == txtFieldPassword {
textField.resignFirstResponder()
}
return true
}
}
Run Code Online (Sandbox Code Playgroud)小智 13
我建议你应该使用switch语句textFieldShouldReturn(_:).
// MARK: UITextFieldDelegate
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
switch textField {
case nameTextField:
phoneTextField.becomeFirstResponder()
case phoneTextField:
emailTextField.becomeFirstResponder()
case emailTextField:
descriptionTextField.becomeFirstResponder()
default:
textField.resignFirstResponder()
}
return false
}
Run Code Online (Sandbox Code Playgroud)
这种方法需要在表视图和集合视图中进行一些更改,但我认为它对于简单的表单是可以的.
将您连接textFields到一个IBOutletCollection,按y坐标对其进行排序,然后textFieldShouldReturn(_:)跳转到下一个文本字段,直到结束:
@IBOutlet var textFields: [UITextField]!
...
textFields.sortInPlace { $0.frame.origin.y < $1.frame.origin.y }
...
func textFieldShouldReturn(textField: UITextField) -> Bool {
if let currentIndex = textFields.indexOf(textField) where currentIndex < textFields.count-1 {
textFields[currentIndex+1].becomeFirstResponder()
} else {
textField.resignFirstResponder()
}
return true
}
Run Code Online (Sandbox Code Playgroud)
或者只看示例项目(xcode 7 beta 4)
快速且以编程方式
class MyViewController: UIViewController, UITextFieldDelegate {
let textFieldA = UITextField()
let textFieldB = UITextField()
let textFieldC = UITextField()
let textFieldD = UITextField()
var textFields: [UITextField] {
return [textFieldA, textFieldB, textFieldC, textFieldD]
}
override func viewDidLoad() {
// layout textfields somewhere
// then set delegate
textFields.forEach { $0.delegate = self }
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if let selectedTextFieldIndex = textFields.firstIndex(of: textField), selectedTextFieldIndex < textFields.count - 1 {
textFields[selectedTextFieldIndex + 1].becomeFirstResponder()
} else {
textField.resignFirstResponder() // last textfield, dismiss keyboard directly
}
return true
}
}
Run Code Online (Sandbox Code Playgroud)
Caleb 的Swift 4.0版本
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if let nextField = self.view.viewWithTag(textField.tag + 1) as? UITextField {
nextField.becomeFirstResponder()
} else {
textField.resignFirstResponder()
}
return false
}
Run Code Online (Sandbox Code Playgroud)
PStextField.superview?不适合我
| 归档时间: |
|
| 查看次数: |
55806 次 |
| 最近记录: |