UITextFieldDelegate 的 textField 方法没有被调用
Posted
技术标签:
【中文标题】UITextFieldDelegate 的 textField 方法没有被调用【英文标题】:textField method of UITextFieldDelegate not being called 【发布时间】:2016-09-23 11:54:25 【问题描述】:我想我可能在做一些愚蠢的事情,但我还是要问这个问题。 我看不到 UITextFieldDelegate 方法 textField 被调用。我创建了一个带有打印语句的简单程序,显示所有其他委托方法都可以正常调用,但不是这个。这是程序代码:
import UIKit
class ViewController: UIViewController, UITextFieldDelegate
//MARK: Properties
@IBOutlet weak var testTextField: UITextField!
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
testTextField.delegate = self
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
//MARK: UITextFieldDelegate
func textFieldShouldReturn(textField: UITextField) -> Bool
print("textFieldShouldReturn")
textField.resignFirstResponder()
return true
func textFieldShouldBeginEditing(textField: UITextField) -> Bool
print("textFieldShouldBeginEditing")
return true
func textFieldDidBeginEditing(textField: UITextField)
print("textFieldDidBeginEditing")
print("Leaving textFieldDidBeginEditing")
func textField(textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
print("textField")
print("Leaving textField")
return true
func textFieldDidEndEditing(textField: UITextField)
print("textFieldDidEndEditing")
print("textField = \(textField.text)")
print("Leaving textFieldDidEndEditing")
就是这样。我在 Interface Builder 中添加了一个带有 UITextField 的 ViewController。输入文本显示正在调用其他委托方法。我正在使用 Xcode 7.3.1。 如果这是一个愚蠢的问题,任何帮助都非常感谢和道歉 - 我希望它是。
【问题讨论】:
你把 UITextField 和 IBOutlet 连接起来了吗? 是的。我在IB中建立了联系。我看到所有其他委托函数都被调用 - 我想如果我没有建立连接,我就不会看到那些? 尝试将 textField 出口标记为强而不是弱(只需删除弱关键字),引用可能会被破坏,因此永远不会调用委托。远射,但值得一试。 刚才试过了。恐怕没有变化。但我很感激现在的任何远射...... 【参考方案1】:我认为由于函数中的拼写错误,您正面临这个问题。
这是你正在使用的:
func textField(textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool ...
函数应该是这样的:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool ...
【讨论】:
好的,非常感谢,现在可以使用了!我说我可能在问一个愚蠢的问题。我从 API 参考页面link 正确复制了函数签名。 Objective-C 声明正确为shouldChangeCharactersInRange
。
使用 Swift 5(根据 this 也使用 Swift 3 和 4)你必须使用 shouldChangeCharactersIn
。【参考方案2】:
只需将此行复制并粘贴到您的 ViewDidLoad 中,然后尝试使用此文本字段
let txtField: UITextField = UITextField(frame: CGRect(x: 0, y: 0, width: 400.00, height: 30.00));
txtField.delegate = self
【讨论】:
没有变化。我今天早上开始以编程方式创建一个文本字段,当我看到 textField 方法没有被调用时,我创建了上面的测试程序,并通过 IB 创建了文本字段以尽可能多地去除不必要的代码。只是又试了一次,还是没有变化。以上是关于UITextFieldDelegate 的 textField 方法没有被调用的主要内容,如果未能解决你的问题,请参考以下文章
UITextFieldDelegate 崩溃 (exc_bad_access)
ViewController 实现 UITextFieldDelegate 时出错