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

Table View Controller each row connected to different view controller

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

所以如果我点击任何一行,它应该打开 Intermediate View 并将适当的控制器放在一个公共位置,其余的东西对所有的东西都是一样的 controller.Suppose 我点击了一个索引映射到 TableView.When 的行它将打开中间控制器,它应该将 table 视图放在公共容器中,这个 table 视图应该来自单个 Table所有其他Table视图的视图控制器。

我是 ios 的新手,不会设计这个。

最好的设计方法是什么?我该如何实施?

谢谢

我建议不要在情节提要中创建单元格并连接它。而是在故事板中留空 table 并使用代码创建单元格。您可以通过子类化 UITableViewCell 创建自定义单元格。

在情节提要中,您只需 link table 使用 segue 使用所有视图控制器进行查看,并为其提供适当的 标识符名称 .

现在实现 UITableView 的所有委托方法。覆盖 -tableView:didSelectRowAtIndexPath: 方法并在行 selection 上对特定行执行 segue。

示例:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    switch (indexPath.row) {
        case 0:
            [self performSegueWithIdentifier:@"BasicCoreDataSegue" sender:self];
            break;

        default:
            break;
    }
}

在上面的例子中,如果你 select 第一行,它会推送与 Storyboard 中的 BasicCoreDataSegue segue 连接的视图控制器,你可以将它与图像进行比较。

使用类似的方式创建其他 segues 并在 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";
    }
} 

编辑:

以上代码适用于普通控制器。现在你不需要在 didSelectRowAtIndexPath 方法中创建更多的 segues set Intermediate controller segue.

使用 [self.tableView indexPathForSelectedRow] 方法在 prepareForSegue 方法中获取 selected 行。

例如:

- (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 是一个整型变量,用于跟踪selected 的行。

现在在 -viewDidLoad() 的中间控制器中使用 switch case 从行 selection 中获取您想要的控制器对象,并将其视图添加为中间控制器中的子视图。

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

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

[self.topView addSubview:controller.view];