【问题标题】:Navigating pages in different tableview在不同的 tableview 中导航页面
【发布时间】:2016-11-17 09:24:39
【问题描述】:

我创建了一个包含两个表视图的屏幕,我已成功调用方法cellForRowAtIndexPath,但现在在使用didSelectRowAtIndexPath 从表视图选项导航到另一个页面时遇到了麻烦。我认为我做错了显然不知道下一步是什么。谁能指导我该怎么做?我用过这个代码-

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([tableView isEqual:leftTableView]) {

            TattooSinglesScreen *obj=[self.storyboard instantiateViewControllerWithIdentifier:@"TattooSinglesScreen"];

            EyecatcherScreen *obj1=[self.storyboard instantiateViewControllerWithIdentifier:@"EyecatcherScreen"];

            TattooToplist *obj2=[self.storyboard instantiateViewControllerWithIdentifier:@"TattooToplist"];

            int i=indexPath.row;
            if(i==0){
                [self.navigationController pushViewController:obj animated:nil];
            }
            else if (i==1) {
                [self.navigationController pushViewController:obj1 animated:NO];
            }
            else if (i==2) {
                [self.navigationController pushViewController:obj2 animated:NO];
            }
    }
    else {
        TattooSinglesScreen *obj=[self.storyboard instantiateViewControllerWithIdentifier:@"TattooSinglesScreen"];

        EyecatcherScreen *obj1=[self.storyboard instantiateViewControllerWithIdentifier:@"EyecatcherScreen"];

        TattooToplist *obj2=[self.storyboard instantiateViewControllerWithIdentifier:@"TattooToplist"];

        int i=indexPath.row;
        if(i==0){
            [self.navigationController pushViewController:obj animated:nil];
        }
        else if (i==1) {
            [self.navigationController pushViewController:obj1 animated:NO];
        }
        else if (i==2) {
            [self.navigationController pushViewController:obj2 animated:NO];
        }
   }
}

【问题讨论】:

  • 你遇到什么问题?确切地告诉我问题所在。
  • 您在 didSelectRowAtIndexpPath 方法的 else 部分完成了相同的代码
  • 通过使用此代码,我试图导航到表格视图中的另一个页面,但它不起作用。什么都没有发生
  • 是的,我只是在检查它是否工作......稍后我将使用其他页面
  • 还是不行:(

标签: ios objective-c uitableview


【解决方案1】:

如果您想从表格视图导航到另一个视图控制器,请不要设置动画:NO。设置动画:YES 用于导航。但是如果您设置动画:NO,它肯定不会导航。所以您必须执行以下操作导航的东西。

YourViewController *yourVC = (YourViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"StoryBordIdentifier"];
[self.navigationController pushViewController:yourVC animated:YES];

你也可以在这个 didSelectRowAtIndexPath 中使用

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

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  YourViewController *vc = segue.destinationViewController;
}

Click Table Row and Go another Page

Segue or didSelectRowAtIndexPath

Making Push Segue when table row is selected

【讨论】:

  • 这不是真的,转场是否动画与下一个视图控制器是否被推送无关。但是,使用 nil 而不是 YESNO 是不正确的。
  • 如果动画 NO 和 nil 表示它如何导航到其他视图?
  • 看他上面的编码。对于动画来说,一切都是没有的。
  • 是的,我明白了。假设nilNO,这只是意味着过渡不应该是动画的。视图控制器将立即出现(而不是从右侧滑入)。这就是参数的含义。还应该是什么意思?调用一个方法然后给它一个表示“不做任何事情”的参数有什么好处?你也可以不叫它。很抱歉,我对您的回答投了反对票,因为它完全是错误的,我们不应该在 SO 上宣传不正确的答案。
  • 对不起,我不想抨击你,但是“但如果你设置动画:不,它肯定不会导航”是完全错误的。如:反之亦然。它导航,它只是没有动画。此外,您的添加将无济于事,因为它们需要情节提要具有连接到合适的视图控制器类型的 segue。由于 pri 实例化了所述视图控制器,然后手动推送给它们,我认为情况并非如此。它可以更好地工作,但肯定需要更多设置。不幸的是,您发布的 prepareForSegue 代码基本上什么也没做。
【解决方案2】:

我看到 user3182143 的回答有所帮助,但值得一提的是,我设置了一个很小的 ​​demo project(现已更新为两个表格),以向任何感兴趣的人展示它是如何完成的。

它还说明(顾名思义),您确实可以手动推送并将动画参数设置为NO,只需在模拟器中运行即可。

我不知道为什么这在你原来的方法中不起作用,pri,但我的猜测是你以某种方式错误地设置了你的导航视图控制器。

为了代码和故事板的可读性,我还是建议使用 segues。

【讨论】:

  • 先生,您的演示仅显示了一个表视图的使用,但我在同一个视图控制器中遇到了两个表视图的问题。单个表格视图我没有遇到任何问题。我的情况不同。
  • PRI 不要与 Gero 的答案混淆。
  • 如果你还有问题,我会帮你的。
  • 你仍然面临问题先生..因为我使用两个表视图而不是同一个视图控制器中的一个...所以我必须对它们都使用每种方法@user3182143
  • 如前所述,您对代码中的第二个表执行完全相同的操作。此外,处理两个表本身不会影响单击任一表的行后呈现另一个视图控制器的问题。哦,还有@user3182143:认真的吗?当您甚至不接受对错误答案的更正时,是一个令人困惑的人?这很琐碎,但没关系,我猜每个人都有自己的想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 2022-11-13
相关资源
最近更新 更多