2017-01-10 12 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

セルは動的に作成され、実際には各セルのコンセント接続が異なる必要があります。 できることは、カスタムセルクラスのデリゲートを作成し、セルをデキューするメソッドcellForRowAtIndexで、ビューコントローラインスタンスに設定します。 次に、ボタンの操作がトリガされたら、デリゲートメソッドを呼び出して、コントロールをView Controllerインスタンスに転送できます。

注:ビューコントローラにハンドラを追加する場合は、さらに助けを求め おかげ

2

をあなたのシナリオを共有してください、それはMVCパターンを中断します。ビュー上のイベントはビュー内で処理する必要があります。ただし、ビューのデリゲートを作成して、ボタンアクションハンドラ自体から呼び出すメソッドを呼び出すことができます。

また、あなたのXIBでは、あなたのUITableViewCellサブクラスとしてアウトレットクラスを指定することになります。したがって、このサブクラスだけがあなたのイベントを処理できます。ボタンが押されたときに私たちは、ブロックと呼ばれる

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

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

と仮定ボタンは次のようにIBOutletアクションを持っている:

1

他のアプローチは、あなたのようなのUITableViewCellクラスのブロックを宣言することができます。あなたがボタンを押したときにブロックのみが呼び出されます

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

Controllerクラスでは、あなたにブロックを定義することができます。

+0

Objective-cのブロックを使用するには、このチュートリアルをお読みください。 – Saranjith

+0

@Saranjith http://www.appcoda.com/objective-c-blocks-tutorial/ – Amanpreet

関連する問題