2015-11-05 40 views
0

我是一個初學者,而不是英語家庭。 所以我的英語很差...... 如何傳遞參數到我的FUNC ..如何在addTarget的動作中傳遞參數?

這是我的代碼:

@IBAction func newitem(sender: AnyObject) { 
    ... 
    ArrayofQuantityTextfield.append(UITextField(frame: CGRect(x: ArrayofQuantityTextfield[i-1].frame.origin.x, y: ArrayofQuantityTextfield[i-1].frame.origin.y + 50, width: 65.00, height: 30.00))); 
ArrayofQuantityTextfield[i].addTarget(self, action: ***Selector("textChang(\(i))")*** 
, forControlEvents: UIControlEvents.EditingChanged) 
self.view.addSubview(ArrayofQuantityTextfield[i]) 
... 
**func textChange(i : Int)**{ 
    if ArrayofPriceTextfield[i].text!.isEmpty == false && ArrayofQuantityTextfield[i].text!.isEmpty == false { 
     if (Int(ArrayofPriceTextfield[i].text!) != nil) && (Int(ArrayofQuantityTextfield[i].text!) != nil){ 
      ArrayofSubtotalLabel[i].text = "\(Int(ArrayofPriceTextfield[i].text!)! * Int(ArrayofQuantityTextfield[i].text!)!)" 
     } else 
     { ArrayofSubtotalLabel[i].text = "plz enter number" } 
    } 
} 

我使用數組動態文本字段添加,所以我需要知道「 i」的

[test.ViewController textChang(1)]:無法識別的選擇發送到實例0x7ff852d0a5e0 2015年11月5日21:42:00.596測試[5364:184402] ***終止應用程序由於未捕獲的異常「NSInvalidArgumentException ',原因:' - [test.ViewController textChang(1)]:無法識別的選擇器發送到實例0x7ff852d0 a5e0'

⬆︎錯誤信息。

任何人都可以幫到我嗎?謝謝。

+0

在我們開始回答之前,我想建議您:a)修復代碼的縮進和b)使用局部變量,以便可以讀取您的代碼。 –

回答

0

只要把冒號

Selector("textChange:") 

當添加目標,以UIControl你不能有其他的參數。 Byy目標中的默認選擇器將接收發件人。所以,你的選擇應該是

func textChange(sender : UITextfield) 
{ 

} 

但我感覺你想找到選擇哪個文本框。所以,你可能要一個標識符標記值保持到的UITextField

ArrayofQuantityTextfield[i].tag = i; 
ArrayofQuantityTextfield[i].addTarget(self, action: Selector("textChange:"), forControlEvents: UIControlEvents.EditingChanged) 

在您的按鈕操作

func textChange(sender : UITextfield) 
    { 
     if (sender.tag == your_i_value) 
     { 
      //Do your stuff 
     } 
    } 
+0

謝謝。我會試試 –

+0

我明白了!非常感謝你。 –

0

要做到這一點最簡單的和正確的方法是繼承UITextField和添加的屬性NSInteger在這個新的子類。

之後,您需要使用這個新的子類,而不是UITextField,並將值i設置爲該屬性。

現在您可以在任何想要使用的位置訪問i的值。

ArrayofQuantityTextfield[i].addTarget(self, action: Selector("textChange:"), forControlEvents: UIControlEvents.EditingChanged) 

而且你需要使用iPrabhu's答案把:所以textChang方法,你可以使用這個新的子類的對象。

+0

你的意思是我應該創建一個新類或重寫UITextField來完成這個問題? –

+0

覆寫此課程。 –

+0

好的。謝謝 ! –

相關問題