无效的重新声明" textViewDidChange"迅速

时间:2015-07-28 10:22:33

标签: ios swift textbox

我有三个不同的文本框,其中我需要使用3个不同的" textViewDidChange"方法。将它们组合在一个函数中对我来说不起作用我是三个可能相互影响的不同动作。所以我想尝试三种不同的功能,如下所示。但是我得到了无效的重新声明"错误。我怎么能搞清楚?

func textViewDidChange(messageTxt1: UITextView) {

    var len = count(messageTxt.text.utf16)

    var diff = 90 - len

    if diff < 0 {

        charsLbl.textColor = UIColor.redColor()
    } else {

        charsLbl.textColor = UIColor.blackColor()
    }

    charsLbl.text = "\(diff) chars left"

}


func textViewDidChange (messageTxt2: UITextView) {

    refreshResults()

    var len2 = count(messageTxt2.text.utf16)

    if len2 > 3 {

        println("search")

    }

    else

    {

        resultsTable.hidden = true

    }

    var diff2 = 30 - len2

    if diff2 < 0 {

        charsLbl2.textColor = UIColor.redColor()
    } else {

        charsLbl2.textColor = UIColor.blackColor()
    }

    charsLbl2.text = "\(diff2) chars left"


}


func textViewDidChange (messageTxt3: UITextView) {


    var len3 = count(messageTxt3.text.utf16)

    var diff3 = 30 - len3

    if diff3 < 0 {

        charsLbl3.textColor = UIColor.redColor()
    } else {

        charsLbl3.textColor = UIColor.blackColor()
    }

    charsLbl3.text = "\(diff3) chars left"


}

2 个答案:

答案 0 :(得分:1)

这根本不可能,因为每个textViewDidChange:方法采用与参数相同的类型(函数范围内的变量名称不会在此处起作用)。

使用多个函数对其进行排序的一种方法是使用一个textViewDidChange:方法并将其用作调用其他函数的方法:

func textViewDidChange(textView: UITextView) {
    switch textView {
    case textView1:
        textViewDidChange1()
        break
    case textView2:
        textViewDidChange2()
        break
    case textView3:
        textViewDidChange3()
        break
    default:
        print("Shouldn't happen")
        break
    }
}

func textViewDidChange1() {
    // Do something
}

func textViewDidChange2() {
    // Do something
}

func textViewDidChange3() {
    // Do something
}

textView1,textView2和textView3是UITextViews的Outlets。 这看起来有点矫枉过正,但它确实有效。

答案 1 :(得分:0)

  1. 您正在创建三个名称相同的方法textViewDidChange
  2. 在您的情况下,使用tag属性并为所有人定义一种方法。
  3. 示例

    let textView1 = UITextView()
    textView1.tag = 1
    
    let textView2 = UITextView()
    textView2.tag = 2
    
    let textView3 = UITextView()
    textView3.tag = 3
    
    In method just add condition for that.
    
    func textViewDidChange (messageTxt: UITextView) {
    
    if messageTxt.tag == 1
    {
         // Your code for textview 1
    }
    else if messageTxt.tag == 2
    {
          // Your code for textview 2
    }
    else if messageTxt.tag == 3
    {
        // Your code for textview 3
    }}