Swift:如何使用 UISwitch 控制 UITextField 通过委托启用或禁用
Posted
技术标签:
【中文标题】Swift:如何使用 UISwitch 控制 UITextField 通过委托启用或禁用【英文标题】:Swift: how to use UISwitch to control UITextField to be enabled or disabled with a delegate 【发布时间】:2015-06-28 00:42:08 【问题描述】:在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或textFieldShouldBeginEditing的strong>false
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()
但它并不如我所愿。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:self.uiswitchControlledTextField.delegate = SwitchControlledTextFieldDelegate()
问题在于该行仅创建了 SwitchControlledTextFieldDelegate 类的一个实例,然后它立即又不存在了。
您需要使用一些已经存在且将持续存在的实例作为您的文本字段委托 - 可能就像您的视图控制器!
【讨论】:
谢谢,已加分。但是当 UI Switch 关闭时,如何启用 UITextField 呢?我应该将其代表重新分配给其他人吗?【参考方案2】:(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()
【讨论】:
以上是关于Swift:如何使用 UISwitch 控制 UITextField 通过委托启用或禁用的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SWIFT 3 中的另一个 ViewController 检查 UISwitch 的状态?