ViewController内にテーブルビューがあります。テーブルビュー内にすべての情報を入力できます。ただし、詳細ビューを設定するのに少し迷っています。各テーブルセルには、各詳細ビューへのセグエが必要だと思いますが、完全にはわかりません。
これが私のコードです。テーブルビューから詳細ビューへのセグエを達成するために何が欠けていますか?コード:
.h
@interface DetailViewController : UIViewController <UITableViewDelegate,UITableViewDataSource>
{
IBOutlet UITableView *myTable;
NSMutableArray *contentArray;
}
@property (strong, nonatomic) IBOutlet UITableView *myTable;
.m
- (void)viewDidLoad
{
contentArray = [[NSMutableArray alloc]init];
[contentArray addObject:@"Espresso"];
[contentArray addObject:@"Latte"];
[contentArray addObject:@"Capicino"];
[super viewDidLoad];
// Do any additional setup after loading the view.
}
//Table Information
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [contentArray count];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if([[contentArray objectAtIndex:indexPath.row]isEqualToString:@"EspressoViewController"])
{
EspressoViewController *espresso = [[EspressoViewController alloc]initWithNibName:@"EspressoViewController" bundle:nil];
[self.navigationController pushViewController:espresso animated:YES];
}
else if ([[contentArray objectAtIndex:indexPath.row] isEqualToString:@"Latte"])
{
LatteViewController *latte = [[LatteViewController alloc] initWithNibName:@"Latte" bundle:nil];
[self.navigationController pushViewController:latte animated:YES];
}
}
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
[self tableView:tableView didSelectRowAtIndexPath:indexPath];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"CellIdentifier"];
}
NSString *cellValue = [contentArray objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.font = [UIFont systemFontOfSize:16];
cell.detailTextLabel.text = @"Hot and ready";
UIImage *image = [UIImage imageNamed:@"coffeeButton.png"];
cell.imageView.image = image;
cell.textLabel.text = [contentArray objectAtIndex:indexPath.row];
return cell;
}
これを少し複雑にしすぎたと思います。心配しないでください、私は同じことをよくします。
まず、tableView:didSelectRowAtIndexPath:
内からtableView:accessoryButtonTappedForRowAtIndexPath:
を送信することにより、2つの方法に違いはありません。セルまたはそのアクセサリボタンをタップすると、同じアクションが実行されます。セル自体をタップするのとは異なるアクションを実行するためにアクセサリボタンが必要ない場合は、それを削除します。
次に、ストーリーボードを使用している場合は、ViewControllerにalloc/initWithNibを割り当てる必要はありません。代わりに、セグエを使用してください。ストーリーボードを介してこれを行う場合は、プログラムでviewControllerをnavigationControllerにプッシュする必要もありません。
最初にストーリーボードを作成します。
次に、UITableViewControllerに次のコードを配置します。
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
//Build a segue string based on the selected cell
NSString *segueString = [NSString stringWithFormat:@"%@Segue",
[contentArray objectAtIndex:indexPath.row]];
//Since contentArray is an array of strings, we can use it to build a unique
//identifier for each segue.
//Perform a segue.
[self performSegueWithIdentifier:segueString
sender:[contentArray objectAtIndex:indexPath.row]];
}
残りをどのように実装するかはあなた次第です。 UITableViewControllerにprepareForSegue:sender:
を実装してから、そのメソッドを使用してsegue.destinationViewController
に情報を送信することをお勧めします。
セグエの送信者としてcontentArrayから文字列を渡したことに注意してください。あなたは好きなものを渡すことができます。セルを識別する文字列は、渡すのに最も論理的な情報のように見えますが、選択はあなた次第です。
上に投稿されたコードはあなたのためにナビゲーションを実行するはずです。