故事板和uitableview困境

时间:2013-01-18 16:16:46

标签: iphone ios xcode uitableview

好的,所以我有一个UITableViewController。在其中我定义了动态tableviewcell。为了简单起见,我们可以说定义了三个动态行。看截图

enter image description here

所以我想做的是当用户触摸时

  • 第1行,我想将它们带到viewcontroller1
  • 第2行,我想将它们带到viewcontroller2
  • 第3行,我想把它们带到viewcontroller3

现在这里是困境部分,当我选择原型单元并使用模态将其连接到viewcontroller1然后从那时起我触摸它的任何行将始终将我带到viewcontroller1。我想为我的UITableViewController编写这段代码,但我不知道如何创建多个圣贤? (见下文)

现在很可能这是故事板和UITableView的限制,并且无法使用动态单元格完成。我需要做的是创建静态单元格并手动将每个行连接到相应的视图控制器。我只是想知道是否有一个更简单的方法,因为我有50行,每行需要连接到一个新的视图控制器。是的,我喜欢将故事板中的内容连接起来。如果有更好的方法,只是想获得第二意见。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // Navigation logic may go here. Create and push another view controller.

        //SECTION #0
        if (indexPath.section == 0)
        {
            [self performSegueWithIdentifier:@"goto1" sender:nil];

        }

    //SECTION #1
        if (indexPath.section == 1)
        {
            [self performSegueWithIdentifier:@"goto2" sender:nil];

        }

    //SECTION #2
        if (indexPath.section == 2)
        {
            [self performSegueWithIdentifier:@"goto3" sender:nil];

        }

}

2 个答案:

答案 0 :(得分:2)

也可以从控制器工具栏中的黄色控制器图标拖动一个segue。选择您的表视图控制器,将显示如下图所示的黑色工具栏。

Controller Toolbar

从黄色图标拖动到所需的目标控制器。

这样,segue不会直接连接到细胞或其他任何东西。为它提供一个标识符,您可以随时在代码中执行它。

在您的情况下,根据您认为合适的逻辑,在performSegueWithIdentifier:sender:中致电tableView:didSelectRowAtIndexPath:

<强> [编辑]:

  

“如果有更好的方法,只是想获得第二意见。”

50个不同的段和&amp;目的地似乎非常多。您确定无法重复使用单个(或至少少于50个)视图控制器(例如,当只有内容不同时?)。例如,您显示50个包含内容的类似页面。而不是在故事板中创建50个视图控制器:创建一个视图控制器并在视图控制器显示之前设置它们的内容:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    MyPageController *page = (MyPageController *)segue.destinationViewController;
    // get content for selected row
    page.content = myContentModelObject;
}

答案 1 :(得分:0)

只能通过在故事板中拖出线来创建Segues。一旦创建它们,您就可以自定义它们,但如果您必须首先绘制它们,那么它们并没有多大用处。

为了节省你绘制所有这些行(并调试它们......),你可以轻松地完成Segue的工作,而无需使用故事板。对于模态segue:

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString* identifier = [NSString stringWithFormat:@"%d",indexPath.row];
    RWViewController* detailView = [self.storyboard instantiateViewControllerWithIdentifier:identifier];
    [self presentViewController:detailView animated:YES completion:nil];
}

您仍然可以在故事板中创建50个ViewControllers。给每个人一个与相应的indexpath.row匹配的数字标识符

没有画线......

如果故事板在50个viewControllers上变得势不可挡,请考虑为每个故事板使用单独的xib(或者你可以打破几个不同的stoyboards,并将它们分组排列)。