複数のセルを含む単純な TableView があります。通常、このセルをタップすると、選択したセルの詳細に切り替わります。しかし、すべてのセルに専用のボタンが必要な場合はどうすればよいでしょうか? Interface Builder で "Table View Cell" プロパティを見てきました。必要なものはありますが、既存のセルに追加することはできません。
この種のボタンを標準のTableViewのすべてのセルに適切に追加するにはどうすればよいですか?
私は今取り組んでいるアプリで同じようなことをしています。ボタンのあるセルがあり、どのセルでどのボタンが押されたかを知る必要があります。私はこのようにします。
各セルにボタンを追加します。
// add buy button to each cell
UIImage *image;
buyButton = [UIButton buttonWithType:UIButtonTypeCustom];
image = [UIImage imageNamed:@"buy.png"];
[buyButton setBackgroundImage:image forState:UIControlStateNormal];
buyButton.frame = CGRectMake(220, 35, 96, 34);
[buyButton setTag:cellIndex];
[buyButton addTarget:self action:@selector(buyTickets:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:buyButton];
どのセルでどの「ボタン」が選択されたかを判別するために使用される方法。次に、選択されたボタンの情報を使用して別のViewControllerを押します。
// buy tickets button pressed from main table view
- (void) buyTickets:(id)sender{
ResultViewController *vc = [[ResultViewController alloc] init];
vc.buyMovieID = [sender tag]; // "sender tag" is the cell id the button is located in
[[super navigationController] pushViewController:vc animated:YES];
[vc release];
}
これは、各セルのボタンの外観です。お役に立てれば!
PS CELLをタップすると、別のView Controllerがプッシュされますが、[BuyTickets]ボタンをタップすると別のViewControllerがプッシュされます。
詳細開示アクセサリータイプは必要なものだと思います。ドキュメントはUITableViewCell class referenceにあります。
それは言います:
アクセサリ ビューは、テーブル ビューの通常 (デフォルト) 状態でセルの右側に表示されます。標準のアクセサリ ビューには、開示シェブロンが含まれます。有効な accessoriesType 定数の説明については、「セル アクセサリー タイプ」を参照してください。デフォルトは UITableViewCellAccessoryNone です。アクセサリ ビュー プロパティを使用してカスタム アクセサリ ビューが設定されている場合、このプロパティの値は無視されます。セルが有効で、アクセサリ タイプが UITableViewCellAccessoryDetailDisclosureButton の場合、アクセサリ ビューはタッチを追跡し、タップすると、データ ソース オブジェクトに tableView:accessoryButtonTappedForRowWithIndexPath: メッセージを送信します。
セルのaccessoriesTypeプロパティをUITableViewCellAccessoryDetailDisclosureButtonに設定すると、詳細開示ボタンが押されたときに、必要なことを簡単に行うことができます。このアクセサリ タイプを使用することの優れた点は、それが標準的なボタンであるため、ユーザー フレンドリーであり、どのセルがタッチされたかを追跡するすべての作業を実行することです。
カスタム ボタンを使用する場合は、accessoryViewプロパティをそのカスタム ボタンに設定し、イベントをリッスンする必要があります。
テーブルビューセルにボタンを追加する方法は、サブクラス化UITableViewCell
してから、InterfaceBuilderでそのビューを構築することでした。