我是IOS和Objective C开发的新手。我试图从Web加载JSON并将其解析为多级菜单。单击下一步按钮,用户将被定向到另一个屏幕。 我目前有基本的应用程序,其中数据加载到类RootViewController:UITableViewController。 我想在它上面显示导航栏,它将包含下一个屏幕按钮。 我已经尝试了很多选项,但在每个人都没有显示在导航栏中(导航栏本身就在那里,但没有标题或任何按钮)。我有基本的XIB,其中只有对象下的tableview。
任何指示我该怎么做。
示例代码(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中有(正确填充)+蓝色导航栏(无标题或按钮)。
由于
答案 0 :(得分:1)
此代码看起来不完整,但看起来您有点滥用导航控制器。
Read up on UINavigationControllers here in the Apple docs
这里有几个问题:
视图控制器无需维护对其导航控制器的额外引用。将视图控制器添加到导航堆栈时,导航控制器会自动设置和控制其navigationController
属性。
您正在直接设置导航控制器的属性以设置特定视图控制器的导航栏的样式,该控制器实际上不会执行任何操作。您需要单独设置每个视图控制器的navigationItem
样式,导航控制器将自动使用这些属性来创建实际的导航视图。
将修改navigationItem
的所有代码更改为不包含navigationController
。
所以这样:
self.navigationItem.backBarButtonItem = _backButton;
self.navigationItem.title=@"My Title";
编辑:
并补充一下,因为您可能会对如何使用backBarButtonItem
感到困惑。它不代表您将在添加它的项目上看到的后退按钮,而是后退按钮,如果您将其他内容推送到堆栈,您将看到返回到当前项目。
来自docs的片段:
当此导航项位于该顶部项目的正下方时 堆栈,导航控制器派生后退按钮 此导航项的导航栏。当这个属性为零时, 导航项使用其title属性中的值来创建 适当的后退按钮。如果要指定自定义图像或 后退按钮的标题,您可以指定自定义栏按钮项 (使用您的自定义标题或图片)改为此属性。
答案 1 :(得分:0)
我建议您执行Start Developing iOS Apps Today教程,以了解制作iOS应用。 也就是说,我建议您使用导航控制器(带标题,但没有按钮)和菜单实现第一个屏幕。单击菜单中的项目将转到第二个屏幕,您可以在其中显示所选项目的详细信息。
您可以下载我制作的here示例项目,该项目基本上可以满足您的需求。
重要提示:只需使用
即可完成设置导航栏标题self.title = @"My title";