尝试根据textView字段中的字符数禁用/启用下一个按钮(在故事板上开始禁用)。它不起作用,这让我觉得只有textField有这个功能而不是textView(他们在开发textView字段时非常懒惰)。
我为textView和下一个按钮连接了一个插座:
@IBOutlet weak var textView: UITextView!
@IBOutlet weak var nextButton: UIBarButtonItem!
func textView(textView: UITextView, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let oldText: NSString = textView.text
let newText: NSString = oldText.stringByReplacingCharactersInRange(range, withString: string)
if newText.length > 0 {
nextButton.enabled = true
} else {
nextButton.enabled = false
}
return true
}
如何让它工作,因为它完全忽略它,即使它编译没有错误。
答案 0 :(得分:2)
使用过的委托方法错了。
shouldChangeCharactersInRange
适用于UITextField
而不是UITextView
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
UITextView的方法
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
答案 1 :(得分:1)
在类行中需要UITextViewDelegate引用:
class MyViewController: UIViewController, UITextViewDelegate {
}
它还需要从视图控制器到textView委托的引用插座。选择视图控制器,单击出口,从引用插座拖动到textView,单击委托。
答案 2 :(得分:1)
您可能没有将viewController设置为textField的委托。
有两种方法可以做到这一点......
1)覆盖viewDidLoad并提及textField.delegate = self
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
}
2)打开相应的storyBoard,控制将textField拖动到viewController并从弹出窗口中选择委托。
答案 3 :(得分:0)
您必须使用正确的名称定义函数名称,否则将无法识别并且不会触发
func textView(textView:UITextView,shouldChangeCharactersInRange range:NSRange,replacementString string:String) - >布尔{
您必须在类定义中包含UITextViewDelegate引用,以便将它分配给该类:
class ViewController: UIViewController, UITextViewDelegate {
你必须链接textView委托(例如在viewDidLoad中):
textView.delegate = self