2015-11-07 13 views
0

我有以下代碼:如何區分委託方法中的UITextFields?

class ViewController: UIViewController, UITextFieldDelegate { 

    // MARK: Properties 
    @IBOutlet weak var layersTextField: UITextField! 
    @IBOutlet weak var innerShapeTextField: UITextField! 
    @IBOutlet weak var outerShapeTextField: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     layersTextField.delegate = self 
     innerShapeTextField.delegate = self 
     outerShapeTextField.delegate = self 
    } 

    // MARK: UITextFieldDelegate 
    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     textField.resignFirstResponder() 
     return true 
    } 

    func textFieldDidEndEditing(textField: UITextField) { 
     // do something 
    } 

} 

現在textFieldDidEndEditing(_:)我想做些什麼,取決於其UITextField調用此方法。
有沒有什麼辦法可以區分,哪個UITextField做到了這一點?在UITextField上可以設置某種ID或標識符嗎?

回答

2

您可以使用以下兩種方法之一作出此決定:插座或標籤。對於插座方法,請聲明插座實例變量(使用關鍵字IBOutlet),然後建立插座連接。在您的委託方法中,使用指針比較來測試傳入的文本對象是否與出口引用的對象相同。
例如,假設您聲明並連接名爲SSN的插座。您的代碼可能看起來像Listing 3-1

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField { 
    if (textField == SSN) { 
     // ... 
     return NO; 
    } 
    return YES; 
} 

// Translated to Swift: 

func textFieldShouldEndEditing(textField: UITextField) -> Bool { 
    if textField === SSN { 
     // ... 
     return false 
    } 
    return true 
} 
0

您可以創建一個IBAction爲代替:

enter image description here

1

您可以通過下一個申請的名稱檢查。 if textField == layersTextField { //do what you want },您可以爲任何需要特定操作的文本字段執行此操作。