2015-06-28 53 views
0

XCode 6.3.2殘疾人,我有一個的UITextField:斯威夫特:如何使用UISwitch控制的UITextField啓用或委託

@IBOutlet weak var uiswitchControlledTextField: UITextField! 

我現在用的是UISwitch(名爲mySwitch)來控制其開啓或以下面的方式禁用狀態:

@IBOutlet weak var mySwitch: UISwitch! 
mySwitch.addTarget(self, action: Selector("stateChanged:"), forControlEvents: UIControlEvents.ValueChanged) 

//callback below: 
func stateChanged(switchState: UISwitch) { 
     uiswitchControlledTextField.enabled = switchState.on 

    } 

上述效果很好,不過,我期待嘗試,如果有可能創建一個UITextFieldDelegate控制以同樣的方式在上述的UITextField。到目前爲止,我已經通過實施textFieldShouldBeginEditing,其中我想返回false禁用的UITextField以下,但我不知道如何讓UISwitch動態地從textFieldShouldBeginEditing

import Foundation 
import UIKit 

class SwitchControlledTextFieldDelegate: NSObject, UITextFieldDelegate { 

    func textFieldShouldBeginEditing(textField: UITextField) -> Bool { 
     return false; //do not show keyboard or cursor 
    } 

} 
返回

在ViewController中,我嘗試設置

self.uiswitchControlledTextField.delegate = SwitchControlledTextFieldDelegate() 

但我希望這是行不通的。任何幫助,將不勝感激。

回答

0
self.uiswitchControlledTextField.delegate = SwitchControlledTextFieldDelegate() 

問題是,該行僅創建SwitchControlledTextFieldDelegate類的實例,然後該實例立即返回存在。

您需要使用作爲您的文本字段委託的一些已存在的實例,這些實例將會持續存在 - 就像您的視圖控制器一樣!

+0

感謝,分取。但是當UI開關關閉時,如何啓用UITextField?我是否將其代表重新分配給其他人? – TonyGW

0

(Xcode中7) 使用此:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Setting the delegate 
    self.textField3.delegate = self 

    self.editingSwitch.setOn(false, animated: false) 
} 
// Text Field Delegate Methods 
func textFieldShouldBeginEditing(textField: UITextField) -> Bool { 
    return self.editingSwitch.on 
} 
@IBAction func toggleTheTextEditor(sender: AnyObject) { 
    if !(sender as! UISwitch).on { 
     self.textField3.resignFirstResponder() 
    } 
}