2015-07-28 62 views
0

我有三个不同的文本框,其中我需要使用3个不同的“textViewDidChange”方法。将它们组合在一个功能中对我来说并不合适我是三种不同的行为,可能会相互影响。所以我试图做出三个不同的功能如下。但是我得到了“无效的重新声明”错误。我怎么弄出来的?“textViewDidChange”无效的重新声明Swift

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" 


} 

回答

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

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 
}} 
+0

为什么在可以直接比较对象时使用标记? 'messageTxt === textView1'完成你所期望的。 – Fantattitude

+0

@Fantattitude你必须为此保持参考。 – iDhaval

+0

对我来说,保持引用更具有意义,它不太容易出错,而不仅仅是使用带有“魔术”数字的标签。 – Fantattitude

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 。 这看起来有点矫枉过正,但它工作。

+0

谢谢Fantattitude!这解决了我的问题。好的解决方案 – saner