我下面的大书呆子牧场iOS编程书(斯威夫特版本),我有这个文件.
import UIKit
class ConversionViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var celsiusLabel: UILabel!
@IBOutlet var textField: UITextField!
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
print("here")
return true
}
//rest of the code here
}
由于某种原因,textField委托方法没有被调用。我在控制台中看不到“here”日志。我已经反复检查了很多次命名和语法。有什么想法吗?
7条答案
按热度按时间ntjbwcob1#
您需要将文本字段的委托设置为自己。
x759pob22#
这条线存在吗?
agxfikkp3#
我在函数中缺少一个
_
,在第一个括号之后:这不工作:
此方法有效:
sc4hvdpw4#
你必须遵循这些步骤--
1-将
delegate
与类名放在一起。2-在
viewDidLoad
方法中指定delegate
。3-加上
delegate
方法--1sbrub3j5#
对于此功能:
函数文本字段ID开始编辑(_文本字段:UIText字段){ }
确保你不标记它为私人的. e.g.不要到这:
私有函数文本字段ID开始编辑(_文本字段:UIText字段){ }
如果标记为private,就不会调用它。
xqkwcwgp6#
如果在将一个控制器作为子控制器添加到父控制器之前将其嵌入到另一个控制器中,则textfield委托方法可能根本不起作用
ktecyv1j7#
当你确定你的代码都是正确的时候,我会添加一个没有人提到的东西,ViewController在viewDidLoad中写入
variable.delegate = self
,UIView在layoutSubviews中写入variable.delegate = self
。解决这个问题浪费了我太多的时间。