UITextView应该在Swift中改变角色的范围

时间:2014-12-20 22:56:41

标签: ios swift textview

尝试根据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

}

如何让它工作,因为它完全忽略它,即使它编译没有错误。

4 个答案:

答案 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