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< /сильный> от 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
спасибо, баллы сняты. Но когда переключатель пользовательского интерфейса выключен, как включить 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