2016-02-11 118 views
5

这个问题是不是从这些复制:如何在Swift中手动启用/禁用键盘返回键?

我有两个TextFields

@IBOutlet weak var textField1: UITextField! 
@IBOutlet weak var textField2: UITextField! 
  • textField1有如返回键下一页按钮;

  • textField2按钮像返回键;

textField1

textField2

我想启用第二文本字段的围棋按钮只是如果双方的TextField是不是空的。

我试图用someTextField.enablesReturnKeyAutomaticallyTextFieldDelegate,但没有奏效。

谢谢你的帮助。

+0

如何你有没有将'textField1':s下一个响应者设置为'textField2?'(之前有“Next”而不是“Return”)。只是'textField1.returnKeyType = UIReturnKeyType.Next'? – dfri

+0

是的,我认为这很棘手(例如:'textField1'为空,但'textField2'不是:'Go'按钮将被启用)。我已经看到一些未公开的obj-c黑客将返回按钮设置为启用/禁用,但我无法将它们调整为快捷。另外,我们希望避免无证黑客。请参阅[此主题]。 – dfri

+0

好的,这是我最后的尝试,现在我需要去睡觉。只要第一个文本视图为空,该最终版本就会禁用第二个文本视图。之后,只要它是空的,我会在第二个文本视图中使用“Go”按钮。 – dfri

回答

5

以下:只要textField1为空,textField2即被禁用。如果是后者是非空的,我们使textField2,但使Go按钮只有textField2非空(通过.enablesReturnKeyAutomatically属性),

/* ViewController.swift */ 
import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 
    @IBOutlet weak var textField1: UITextField! 
    @IBOutlet weak var textField2: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // text field delegates 
     textField1.delegate = self 
     textField2.delegate = self 

     // set return key styles 
     textField1.returnKeyType = UIReturnKeyType.Next 
     textField2.returnKeyType = UIReturnKeyType.Go 

     // only enable textField2 if textField1 is non-empty 
     textField2.enabled = false 

     // only enable 'go' key of textField2 if the field itself is non-empty 
     textField2.enablesReturnKeyAutomatically = true 
    } 

    // UITextFieldDelegate 
    func textFieldShouldReturn(textField: UITextField) -> Bool { 

     if (textField1.text?.isEmpty ?? true) { 
      textField2.enabled = false 
      textField.resignFirstResponder() 
     } 
     else if textField == textField1 { 
      textField2.enabled = true 
      textField2.becomeFirstResponder() 
     } 
     else { 
      textField.resignFirstResponder() 
     } 

     return true 
    } 
} 

运行过程如下:

enter image description here