【问题标题】:IOS Navigation Bar always emptyIOS导航栏总是空的
【发布时间】:2014-03-04 18:26:29
【问题描述】:

我是 IOS 和 Objective C 开发的新手。我试图从网络加载 JSON 并将其解析为多级菜单之类的东西。单击下一步按钮时,用户将被引导到另一个屏幕。 我目前有基本的应用程序,其中数据被加载到类 RootViewController 中:UITableViewController。 我想在它上面显示导航栏,其中将包含下一个屏幕按钮。 我尝试了很多选项,但每个人都没有在导航栏中显示任何内容(导航栏本身就在那里,但没有标题或任何按钮)。我有基本的 XIB,其中对象下只有表视图。

任何指针我该怎么做。

示例代码(RootViewController.m):-

(void)viewDidLoad

{

  DBGS;

  [super viewDidLoad];

//This Failed   self.navigationController.navigationItem.rightBarButtonItem=self.navigationController.editButtonItem; 
self.navigationController.navigationItem.title=@"My Title";


//This Also Failed

UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:@"left" style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationController.navigationItem.backBarButtonItem = _backButton;
self.navigationController.navigationItem.title=@"My Title";
[_backButton release];

//Remaining Code

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"contents" ofType:@"json"];

self.model = [[TreeListModel alloc] initWithJSONFilePath:filePath];

}

头文件(RootViewController.h)

#import <UIKit/UIKit.h>

#import "TreeListModel.h"

@interface RootViewController : UITableViewController {

    UINavigationController *navigationController;
}

@property (nonatomic, retain) TreeListModel *model;
@property (strong, nonatomic) UINavigationController *navigationController;
@property (strong, nonatomic) UIWindow *window;

@end

我无法发布应用图片。但在 o/p 屏幕中,tableview 存在(正确填充)+ 蓝色 NavBar(无标题或按钮)。

谢谢

【问题讨论】:

  • 如何设置windowself.navigation 控制器?我怀疑你错过了什么。由于不需要在RootViewcontroller中声明navigationController

标签: ios iphone objective-c xcode uitableview


【解决方案1】:

这段代码看起来不完整,但看起来您有点滥用导航控制器。

Read up on UINavigationControllers here in the Apple docs

这里有几个问题:

  1. 视图控制器不需要维护对其导航控制器的额外引用。当视图控制器被添加到导航堆栈时,其navigationController 属性会自动由导航控制器设置和控制。

  2. 您正在直接设置导航控制器的属性以设置特定视图控制器的导航栏样式,这实际上不会做任何事情。您需要单独设置每个视图控制器的navigationItem 样式,导航控制器将自动使用这些属性来创建实际的导航视图。 将所有修改navigationItem 的代码更改为不包含navigationController

像这样:

self.navigationItem.backBarButtonItem = _backButton;
self.navigationItem.title=@"My Title";

编辑: 另外,因为您可能对如何使用backBarButtonItem 感到困惑。它不代表您将在要添加它的项目上看到的后退按钮,而是表示如果您将其他内容推入堆栈,您将看到返回到当前项目的后退按钮。 来自文档的片段:

当此导航项紧挨在顶部项的下方时 堆栈,导航控制器为 此导航项的导航栏。当此属性为零时, 导航项使用其标题属性中的值来创建一个 适当的后退按钮。如果要指定自定义图像或 后退按钮的标题,您可以分配自定义栏按钮项 (使用您的自定义标题或图像)改为此属性。

【讨论】:

    【解决方案2】:

    我建议您学习 Start Developing iOS Apps Today 教程来了解制作 iOS 应用程序。 也就是说,我建议您使用导航控制器(有标题,但没有按钮)和菜单来实现第一个屏幕。单击菜单中的某个项目会将您带到第二个屏幕,您可以在其中显示所选项目的详细信息。

    您可以下载我制作的示例项目here,它基本上可以满足您的需求。

    重要提示:设置导航栏标题很简单

    self.title = @"My title";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多