2017-01-10 119 views

回答

0

例如,您可以創建您想要的任何水龍頭處理程序。

#define handle_tap(view, delegate, selector) do {\ 
view.userInteractionEnabled = YES;\ 
[view addGestureRecognizer: [[UITapGestureRecognizer alloc] initWithTarget:delegate action:selector]];\ 
} while(0) 

在後面的代碼:

SEL sel = @selector(actionOfMine:); 
    handle_tap(btnbck, self, sel); 

作出處理:

-(void) actionOfMine:(UITapGestureRecognizer *)recognizer { 
    UIView * button = (UIView *) recognizer.view; 
    int i = (int)button.tag; 
//... 
} 
+0

如果一個普通的C函數可以實現相同的功能,請不要使用宏。 –

+0

添加宏將不必要地使事情複雜化。此外,這種方法將打破MVC模式。 –

+0

請詳細描述你的意思。這個實現工作,易於使用,沒有內存泄漏。我還沒有發現任何這種解決方案的不利之處。此外,這可以真正幫助添加任何水龍頭編程。 – Vyacheslav

2
// In cellForRowAtIndexpath 

cell.yourButton.tag=indexPath.row; 
button.addTarget(self, action: "buttonHandler:", forControlEvents: UIControlEvents.TouchUpInside) 


func buttonHandler(sender:UIButton!) 
{ 
    if(sender.tag==0){ 
     println("Button at row 0") 
    } 
    else if(sender.tag==1){ 
     println("Button at row 1") 
    } 
} 
+2

使用這種方法,按鈕不再保持單元格的一部分,但成爲視圖控制器的一部分 –

1

在一個視圖控制器類不能創建一個細胞的網點的不同實例單元格是動態創建的,它們確實需要不同的出口連接。 你可以做的是創建一個自定義單元類的委託,並在cell出現單元格的方法cellForRowAtIndex中將其設置爲視圖控制器實例。 然後,當按鈕的動作被觸發時,您可以調用委託方法並將控件傳遞給視圖控制器實例。

注:請分享你的情況進行進一步的幫助 感謝

2

如果添加處理程序視圖控制器,那麼它將打破了MVC模式。視圖中的事件應該在視圖內處理。但是,您可以爲視圖創建一個委託並從您的按鈕操作處理程序本身調用您想要的方法。

此外,由於在您的XIB中,您將指定outlet類作爲您的UITableViewCell子類。所以,只有這個子類才能處理你的事件。

1

另一種方法是你可以聲明在UITableViewCell類,像塊:

var block_CheckBox: (() ->())! 

假設按鈕有一個IBOutlet中操作,如:

@IBAction func didActButton_CheckBoxClicked(_ sender: AnyObject) 
    { 
     if block_CheckBox != nil{ 
      block_CheckBox() 
     } 
    } 

按下按鈕時,我們稱之爲塊。

Controller類,你可以定義塊爲:

cell.block_CheckBox = { 
      ()in 
      //Do required action 
     } 

當你按下按鈕,該塊將只調用。

+0

可以請給我的目標C版本 – Saranjith

+0

@Saranjith請閱讀本教程以在Objective-c中使用塊。 http://www.appcoda.com/objective-c-blocks-tutorial/ – Amanpreet

相關問題