【问题标题】:pushViewController not workingpushViewController 不工作
【发布时间】:2011-09-29 13:51:49
【问题描述】:

我有一个应用程序,它有一个名为 store 的视图。在此视图中,有一个加载 DetailView 的按钮。问题是这个细节视图没有加载/显示。这是我使用的代码:

-(void)knop:(id)sender{
    categoryView = [[CategoryView alloc] init];
    //show detail view using buttonDetail...
    [self.navigationController pushViewController:categoryView animated:YES];
    [categoryView release];
    NSLog(@"Button is working");
}

日志“按钮正在工作”日志,因此 pushViewController 行也被触发。

categoryView 是在我的 .h 文件中制作的:

 CategoryView IBOutlet *categoryView;
}
@property (nonatomic, retain) IBOutlet CategoryView *categoryView;

在 store.xib 中有一个 UIViewController,其出口链接到 categoryView 出口。

在我的应用程序的其他地方,它正在工作,我似乎无法找出为什么这个不是

任何帮助将不胜感激! 太棒了

【问题讨论】:

  • CategoryView 一个 UIView 或 UIViewController。 pushViewController 方法只适用于 UIViewControllers。还有一个 UINavigationController 持有categoryView viewCointroller?
  • 这是一个 UIViewController: @interface CategoryView : UIViewController{
  • 你的“根”视图控制器在 UINSvigationController 中吗?
  • 我只有UIViewController,那我应该在store.xib中放一个UINavigationController吗?
  • 您使用的是什么类型的应用程序?是基于导航还是基于标签栏?

标签: iphone objective-c ios uinavigationcontroller pushviewcontroller


【解决方案1】:

您是否在 AppDelegate 中分配了 UINavigationController?

@接口

@property (nonatomic, retain) IBOutlet RootViewController *rootViewController;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

@implementation didFinishLaunchingWithOptions

rootViewController = [[RootViewController alloc] initWithNibName:@"RootView" bundle:nil];
navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];

[window addSubview:navigationController.view];
[self.window makeKeyAndVisible];

pushViewController 在整个应用程序中都可以正常工作。

【讨论】:

  • 这将删除我的标签栏并在顶部插入一个导航栏。
【解决方案2】:

听起来像

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

将显示 navigationController 为 nil。

我建议创建一个导航类型的新项目,看看应该如何设置。

【讨论】:

  • 它确实出现了空值。我会试试你的建议
  • 目前我已经在 store 类中分配了一个 UINavigation 控制器,并且日志现在没有记录 null。可悲的是它没有推动其他视图控制器 CategoryView。有什么想法吗?
  • 应用委托,applicationDidFinishLoading:根视图控制器设置了什么?
【解决方案3】:

我找到了。由于我使用的是基于标签栏的应用程序,因此我需要将商店标签更改为导航控制器。当我改变它时,它起作用了!谢谢大家的支持!!!

【讨论】:

  • 我想我也有同样的问题。您能否详细说明您对这个答案的意思?
  • 好吧,在你的 main.xib 中。您可能已经声明了您所拥有的视图...这是您的标签栏本身所在的 xib。您只需要选择您的视图并确保它是一个导航控制器
  • 哦,好的。但这意味着我的按钮和表格视图不会显示,因为它们是我要加载的视图的一部分。替换为 navigationController 后,您将视图内容移到了哪里?
  • navigationController 是一个控制器。你可以在这里看到不同类型的视图。例如 UITableView...控制器只是所有视图的容器,但通过导航选项扩展它。
  • 好的,谢谢。我想我必须重新设计我的方法,因为我现在在启动应用程序时加载的是一个空的 navigationView 而不是我的旧 customView。
【解决方案4】:

如果你的视图是基于 nib 的,你需要使用:

categoryView = [[CategoryView alloc] initWithNibName:nibName bundle:nibBundle];

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多