我建议不要在 Storyboard 中创建单元格并连接它。而是在情节提要中留下空表并使用代码创建单元格。您可以通过子类化UITableViewCell 创建自定义单元格。
在情节提要中,您只需使用 segue 将表视图与所有视图控制器链接并为其提供正确的 标识符名称。
现在实现UITableView 的所有委托方法。覆盖-tableView:didSelectRowAtIndexPath: 方法并在行选择时对特定行执行segue。
示例:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.row) {
case 0:
[self performSegueWithIdentifier:@"BasicCoreDataSegue" sender:self];
break;
default:
break;
}
}
在上述情况下,如果您选择第一行,它将推送与 Storyboard 中的BasicCoreDataSegue segue 连接的视图控制器,您可以将其与图像进行比较。
使用类似的方式创建其他segues并在不同的switch case中以didSelectRowAtIndexPath方法调用它们。
此外,如果您想将任何值传递给推送控制器,请覆盖以下方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
if ([[segue identifier] isEqualToString:@"BasicCoreDataSegue"]) {
// Get reference to the destination view controller
TextViewController *vc = [segue destinationViewController];
vc.textView.text = "Hello";
}
}
编辑:
以上代码适用于普通控制器。现在您也不需要在didSelectRowAtIndexPath 方法集中间控制器segue 中创建更多segue。
使用[self.tableView indexPathForSelectedRow] 方法获取prepareForSegue 方法中的选定行。
例如:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self performSegueWithIdentifier:@"BasicCoreDataSegue" sender:self];
}
现在当prepareForSegue被调用时,为中间控制器设置整数值。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// You can get selected row using below line
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
// Pass the selected object to the new view controller.
if ([[segue identifier] isEqualToString:@"BasicCoreDataSegue"]) {
// Get reference to the destination view controller
IntermediateController *vc = [segue destinationViewController];
vc.selectedIndex = indexPath.row;
}
}
在上面的代码中selectedIndex 是一个整数变量,用于跟踪选择了哪一行。
现在在 -viewDidLoad() 的中间控制器中使用 switch case 从行选择中获取您想要的控制器对象,并将其视图添加为中间控制器中的子视图。
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle: nil];
TextViewController *controller = (TextViewController*)[storyBoard
instantiateViewControllerWithIdentifier: @"TextViewControllerId"];
[self.topView addSubview:controller.view];