我正在测试一个简单的场景,它有一个 UITableViewController,它的单元格连接到另一个 UIViewController。现在,在这个过程中,我需要向 UIViewController 传递一些信息,例如商品的名称和价格。我想测试使用 prepareForSegue 和 didSelectRowAtIndexPath: 来传递这两个数据点之间的区别。它似乎适用于 didSelectRowAtIndexPath: 但不适用于 prepareForSegue。做了一些调试后:
1-我想知道 prepareForSegue 是否在destinationViewController 上的任何IBOutlet 初始化之前发生,因此您无法有效地设置它们。所以 prepareForSegue 似乎更倾向于传递非 IBOutlet 属性。
2-如果我使用常规推送 segue,如何从 didSelectRowAtIndexPath: 方法访问“segue.destinationViewController”。
PS:在测试prepareForSegue时,我将IB中的segue设置为push,而在测试didSelectRowAtIndexPath:时,我将IB中的segue设置为模态。
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;
}
谢谢