Swift: как да използвате UISwitch, за да контролирате UITextField да бъде активиран или деактивиран с делегат

В XCode 6.3.2 имам 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 динамично да връща true или false< /strong> от 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()

но не работи както исках. Всяка помощ ще бъде оценена.


person TonyGW    schedule 28.06.2015    source източник


Отговори (2)


self.uiswitchControlledTextField.delegate = SwitchControlledTextFieldDelegate()

Проблемът е, че този ред просто създава екземпляр на вашия клас SwitchControlledTextFieldDelegate, който след това незабавно престава да съществува.

Трябва да използвате като делегат на вашето текстово поле някакъв екземпляр, който вече съществува и който ще продължи да съществува - като, може би, вашия контролер за изглед!

person matt    schedule 28.06.2015
comment
благодаря, взети точки. Но когато UI Switch е изключен, как мога да активирам UITextField? да преназнача ли неговия делегат на нещо друго? - person TonyGW; 28.06.2015

(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()
    }
}
person Mateo Villagomez    schedule 29.08.2016