別のUIViewControllerへのセルセグエを持つUITableViewControllerを持つ単純なシナリオをテストしています。そのセグエの間に、アイテムの名前や価格などの情報をUIViewControllerに渡す必要があります。prepareForSegueとdidSelectRowAtIndexPathの使用の違いをテストしたかったので、これら2つのデータポイントを渡します。didSelectRowAtIndexPath:で機能するようですが、prepareForSegueでは機能しません。デバッグを行った後:
1-destinationViewControllerのIBOutletが初期化される前にprepareForSegueが発生するので、効果的に設定できないのではないかと思います。したがって、prepareForSegueは、IBOutlet以外のプロパティを渡すことを目的としているようです。
2-通常のプッシュセグエを使用している場合、didSelectRowAtIndexPath:メソッドから「segue.destinationViewController」にアクセスするにはどうすればよいですか。
PS:prepareForSegueをテストするときは、IBのセグエをプッシュに設定しています。didSelectRowAtIndexPath:をテストするときは、IBのセグエをモーダルに設定しています。
PS:本名との類似点はすべて偶発的です!
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"itemDetailSegue"])
{
NSIndexPath *indexPath=[self.tableView indexPathForSelectedRow];
NSString *theItemName=[[self.itemsForSale objectAtIndex:indexPath.row]objectForKey:@"Name"];
NSString *theItemPrice=[[self.itemsForSale objectAtIndex:indexPath.row]objectForKey:@"Price"];
JuanDetailVC* juanDetailVC= (JuanDetailVC*) segue.destinationViewController;
juanDetailVC.itemName.text=theItemName;
juanDetailVC.itemPrice.text=theItemPrice;
}
}
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *theItemName=[[self.itemsForSale objectAtIndex:indexPath.row]objectForKey:@"Name"];
NSString *theItemPrice=[[self.itemsForSale objectAtIndex:indexPath.row]objectForKey:@"Price"];
JuanDetailVC* juanDetailVC= (JuanDetailVC*) self.presentedViewController;
juanDetailVC.itemName.text=theItemName;
juanDetailVC.itemPrice.text=theItemPrice;
}
ありがとう