uibutton応答伝パラメータ
2093 ワード
転載元:http://innovatence.com/?p=196
開発の過程で、UButtonの応答をどうやって呼び出すかという初心者がよく聞きますが、
1.delegateを使うには、まずCustoomCell類ファイルにprotocolを定義します。次のような定義があります。
2.View Controllerに応答の第二の方法を追加する場合は、
開発の過程で、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
}
}
}