【问题标题】:what is the correct approach to push or segue a new view from only one cell of a dynamic tableview从动态表格视图的一个单元格中推送或分隔新视图的正确方法是什么
【发布时间】:2013-05-14 21:11:59
【问题描述】:

IOS 6 , XCode 4.6.2 使用故事板

这是我的问题。我有一个使用动态原型的带有 7 个单元格的表格视图。我想从第三个单元格转到另一个表格视图(这将允许用户选择一个国家并将该国家传回。)

是否可以将其设置为只有一个单元格触发转场?

如果不是,那么我认为我需要使用 didSelectRowAtIndexPAth 方法 - 但如果我没有在情节提要中绘制序列,我无法调用 performSegueWithIdentifier,因为没有标识符 - 也没有 segue

有什么想法应该怎么做?

干杯

西蒙

【问题讨论】:

    标签: ios uitableview uistoryboard


    【解决方案1】:

    不要从表格中的单元原型中画出你的转场。而是从表格视图控制器下方的Files Owner 图标将其绘制到下一个表格视图控制器。给它一个标识符,然后调用

    [self performSegueWithIdentifier:@"yourSegueIdentifier" sender:self];
    

    tableView:didSelectRowAtIndexPath.

    【讨论】:

    • 哦,这看起来是一个有趣的方法,我从来没有想过 - 我已经使用 anils 但以后可能会使用这个想法 - 谢谢你的洞察力:)
    • 事实上,我按照你的方式进行,现在已将其标记为正确答案。这似乎是更好的解决方案,因为在新的视图控制器中,我将用于所选国家/地区的委托协议定义到我的数据存储中。这在使用 DetailViewController *viewController=[self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 时停止工作[self.navigationController pushViewController:viewController Animation:YES];但使用您的方法可以正常工作 - 很棒
    【解决方案2】:

    如果您在视图控制器之间没有 segue,您可以使用 UINavigationController 的 push 方法。

    如果您已经在两个视图控制器之间设置了 segue,您可以这样做:

    -(void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
       if(indexPath.row == yourCellIndex) {
           [self performSegueWithIdentifier:@"yourSegueIdentifier" sender:objectThatYouSendOrNill];
       }
    }
    

    如果您在表格视图控制器中使用静态单元格,您可以直接将单元格中的 segue 链接到目标视图控制器。

    【讨论】:

    • Cheers Danypata - 我了解 performeguewithIdentifier 的格式,并且一直在其他地方使用它,在 didselectRowAtIndexPath 的苹果模板中没有问题,他们有一些虚拟代码如下 /* *detailViewController = [ [ alloc] initWithNibName:@"" bundle:nil]; [self.navigationController pushViewController:detailViewController 动画:YES]; */ 但是当我使用故事板时,我没有视图控制器的笔尖名称,因为它在我的故事板上,而不是单独的文件。想法?
    • 那么,问题出在哪里(可能我没看懂你的问题)?你不能以编程方式创建 UIStoryBoardSegue,如果你没有 segue,那么你必须 push/presentModal 你的视图控制器;)
    • 如果我从动态原型创建一个segue,所有的单元格都会跳转到新的视图,我只希望一个这样做。我是否需要将新的视图控制器从情节提要中取出并将其粘贴到单独的笔尖中 - 这看起来很愚蠢 - 还是我需要放弃动态方法并使用静态单元格?
    • 动态方法是当您有动态单元格(未知数字、属性等)时。如果您的单元格始终相同,则可以在 tableViewController 中使用静态单元格,然后您可以将每个单元格链接起来。但何必呢?使用didSelectRow,因为在这种情况下,代码是more 可重复使用的;)
    【解决方案3】:

    您可以在情节提要本身中设计 DetailViewController。为该视图控制器提供 StoryboardID。并在 didSelectRowAtIndexPath

    -(void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
       if(indexPath.row == 3)
      {
        DetailViewController *viewController=[self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
    [self.navigationController pushViewController:viewController animated:YES];
       }
    }  
    

    不要忘记为 DetailViewController 提供 StoryboardIdDetailViewController

    【讨论】:

    • 干杯 Anil 看起来更像我需要的东西 - 一个用 nib 初始化的情节提要替代品 - 最后一件事,我的表格视图位于标签栏控制器的视图中,因此可以替代 self。导航控制器将是...
    • 你有两个选择.. !. 1. [self presentViewController:viewController animated:YES completion:nil];然后你不会有那种感觉(推)。一种更好的方法是将导航控制器添加到情节提要链接选项卡栏->导航控制器-> yourviewController(table view),然后通过代码推送detailView
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多