2016-02-11 248 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