Table View Controller每行连接到不同的视图控制器

Nul*_*ify 6 objective-c uitableview uiviewcontroller ios

我正在尝试开发一个表视图控制器,其中行连接到多个View Controllers(TextField,TextView,TableView,DatePicker,ImageView等).

因此,如果我点击任何一行,它应该打开Intermediate View并将相应的控制器放在一个公共位置,其中所有控制器的其余部分将是相同的.假设我点击了索引映射到TableView的行.当它将打开中间控制器,它应该将tableview放在公共容器中,这个表视图应该来自单个TableView控制器,用于所有其他Tableview.

我是ios的新手,不能设计这个.

设计这个的最佳方法是什么?我该如何实现?

根表视图

在此输入图像描述

谢谢

Kam*_*pai 6

我建议不要在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,如果选择第一行,它将推送与BasicCoreDataSegueStoryboard中的segue 连接的视图控制器,您可以将其与图像进行比较.

使用类似的方法创建其他segue并didSelectRowAtIndexPath在不同的switch case中调用它们.

此外,如果要传递任何值以推送控制器,请覆盖以下方法:

- (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";
    }
} 
Run Code Online (Sandbox Code Playgroud)

编辑:

以上代码适用于通用控制器.现在,您不需要在didSelectRowAtIndexPath方法集中间控制器segue中创建更多segue.

使用[self.tableView indexPathForSelectedRow]方法获取方法中的选定行prepareForSegue.

例如:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        [self performSegueWithIdentifier:@"BasicCoreDataSegue" sender:self];
}
Run Code Online (Sandbox Code Playgroud)

现在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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中selectedIndex是一个整数变量,用于跟踪选择哪一行.

现在在Intermediate controller中-viewDidLoad()使用switch case从行选择中获取你想要的控制器对象,并在Intermediate Controller中将其视图添加为子视图.

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];

TextViewController *controller = (TextViewController*)[storyBoard 
                    instantiateViewControllerWithIdentifier: @"TextViewControllerId"];

[self.topView addSubview:controller.view];
Run Code Online (Sandbox Code Playgroud)