uibutton応答伝パラメータ

2093 ワード

転載元:http://innovatence.com/?p=196
開発の過程で、UButtonの応答をどうやって呼び出すかという初心者がよく聞きますが、
- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
      方法はパラメータを伝えることができません。答えられるのはUButtonだけです。UUButtonを通して「パラメータを伝える」方法を学びます。私たちはUITable Viewを例にとって、UITable View Cellを定義します。Custom Cellと呼びます。cellにUButtonのコントロールが加えられています。どのようにUUButtonをクリックしてセルを獲得しますか?次の2つの方法で実現できます。
      1.delegateを使うには、まずCustoomCell類ファイルにprotocolを定義します。次のような定義があります。
@protocol CustomCellProtocol
  - (void)customCell:(CustomCell *)cell didTapButton:(UIButton *)button;
@end
      UButtonの応答をCustomoCellファイルに追加します。例えば、この応答を「UButton」といいます。
- (IBAction)buttonTarget:(id)sender;
      では、ブットオンをクリックすると、この方法が呼び出されます。この方法は次のように実現できます。
- (IBAction)buttonTarget:(id)sender
{
  if ([self.delegate respondsToSelector:@selector(customCell:didTapButton:)])
  {
    [self.delegate performSelector:@selector(customCell:didTapButton:) withObject:self   withObject:self.button];
  }
}
      そして、UIView Controllerでエージェント方法を実現すれば、このUButtonがあるUITable Viewellを獲得することができる。
2.View Controllerに応答の第二の方法を追加する場合は、
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
      方法はUButtonに直接応答を付加する。次のように実現します
-(UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  CustomCell *cell = [atableView dequeueReusableCellWithIdentifier:@"CustomCell"];
  [cell.button addTarget:self action:@selector(didTapButton:)   forControlEvents:UIControlEventTouchUpInside];
return cell;
}
      buttonをクリックすると呼び出します。
- (void)didTapButton:(UIButton *)sender
      残りはどのようにこのsenderを通してそのありかのセルを獲得しますか?私たちはこの方法をこのように実現します。
- (void)didTapButton:(UIButton *)sender
{
  CGRect buttonRect = sender.frame;
  for (CustomCell *cell in [tableView visibleCells])
  {
    if (CGRectIntersectsRect(buttonRect, cell.frame))
    {
      //cell       
    }
  }
}