【问题标题】:Problems with pushViewControllerpushViewController 的问题
【发布时间】:2011-04-29 10:55:29
【问题描述】:

我有一个应用程序,其中有一个根视图控制器,它将另一个视图控制器推入视图。此视图控制器显示一个表格。当一个单元格被选中时,它会推送到另一个视图控制器。 第一次推动有效,但第二次无效。 这是我在表格中选择单元格的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

TwoViewController *two = [[TwoViewController alloc] initWithNibName:@"TwoViewController": bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:two animated:YES];
[two release];

知道我做错了什么吗?我用于两次推送的代码几乎相同...... 我也试过将此代码放在 UIButton 的 touchUpInside 事件中,但它不起作用。 我的猜测是没有navigationController来推送视图,但我不知道。 请帮忙!

【问题讨论】:

  • 你能贴出你用来推送第一个视图控制器的代码吗?

标签: iphone objective-c uiviewcontroller push


【解决方案1】:

您是否更改了 TwoViewController 上的 -initWithNibName:bundle 方法?我的猜测是它没有正确初始化(即:该方法没有正确初始化超类)。

编辑:我想我发现了错误,实际上很明显。

请检查您发布的此代码:

initWithNibName:@"TwoViewController": bundle:[NSBundle mainBundle]];

错误在@"TwoViewController":字符串附近,一个不应该出现的多余分号,改成:

initWithNibName:@"TwoViewController" bundle:[NSBundle mainBundle]];

【讨论】:

    【解决方案2】:

    同时记录 'two' 和 self.navigationController,

    NSLog(@"two = %@", two);
    
    NSLog(@"self.navigationController = %@", self.navigationController);
    

    首先你会知道,如果其中一个是 nil(或两者都是),以及 tableView:didSelectRowAtIndexPath: 是否被调用。

    【讨论】:

    • tableView:didSelectRowAtIndexPath: 被调用,我在方法结束前尝试了一个 NSLog(@"method is getting called") 并得到消息。
    • 但是,NSLog(@"self.navigationController = %@", self.navigationController);给出'null'的结果。两个视图控制器给出了这个结果。这是否意味着两者都是零?我该如何解决这个问题?二 =
    • 你是否在TwoViewController 中进行了任何特殊初始化或在viewDidLoad 中进行了任何奇怪的操作? self.navigationController 不应为零。
    【解决方案3】:

    它的导航控制器问题。检查它正确

    【讨论】:

      【解决方案4】:

      如果新的视图控制器是视图的一部分,它可能没有导航控制器。在推送之前检查导航控制器是否为零。

      【讨论】:

      • 你应该做的是提供创建视图的viewController的navigationController作为视图的参数,这样视图就可以使用父viewController的navigationController。
      • 你不应该这样做。 self.navigationController 属性将在您推送新的视图控制器时自动设置。
      • @kubi:他的子视图不知道他的导航控制器,所以他必须提供导航控制器作为属性(分配)或任何其他方式能够推送视图控制器(或者他有在他的“superview”类上调用它,但这是一种不太安全的方法,不能总是确定 superview 是 UIViewController 的子类)。
      • 他说他的类是UIViewController的子类,被推入导航栈。默认情况下应该设置 navigationController 属性,所以他一定是在某个地方搞砸了。
      • 啊,是的,我想我看错了,我以为我读过他创建了一个 UIView 子类。在那种情况下,navigationController 为什么是 nil 有点令人费解。
      猜你喜欢
      • 2011-10-19
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2011-05-17
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多