2015-07-28 56 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