我有一个UItableViewController。在这个类里面有以下方法,我试图启动另一个UIViewController。我尝试使用segue连接两个并给它一个标识符,然后使用这个版本:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"About to launch MyDetail View controller");
[self performSegueWithIdentifier:@"myDetailSegue" sender:self];
}
那没有用,应用程序冻结了,我在main.m文件中收到如下消息:“”线程1收到信号Sigabrt“
然后删除了segue并尝试按如下方式实例化UIViewcontroller,
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"About to launch my Detail View controller");
UIStoryboard *sboard = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];
UIViewController *myDetailVC = [sboard instantiateViewControllerWithIdentifier:@"myDetailVC"];
[self.navigationController pushViewController:myDetailVC animated:YES];
}
哪个有效。但现在我很困惑。为什么UIStoryboard方式工作而segue不是??? 有人可以帮忙,我很困惑。
答案 0 :(得分:3)
我不明白你面临的确切问题,但我想告诉你,因为你首先使用uitableview,请将其单元格连接到新视图控制器并选择“推送”segue方法。完成此操作后,在应用程序中添加以下代码,而不是用户 didselectrowatindexpath 方法。
(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
/ * 选择行时,segue会将详细视图控制器创建为目标。 将详细视图控制器的详细信息项设置为与所选行关联的项。 * / if([[segue identifier] isEqualToString:@“Showcategorydetails”]){
NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow];
CategoryDetailsController *detailViewController = [segue destinationViewController];
detailViewController.category_title = [maincategories_array objectAtIndex:selectedRowIndex.row];
} }