IOS 如何更改现有 UI 以使用新的导航控制器
Posted
技术标签:
【中文标题】IOS 如何更改现有 UI 以使用新的导航控制器【英文标题】:IOS How to alter an existing UI to use a new navigation controller 【发布时间】:2011-01-07 11:03:30 【问题描述】:好的,我遇到了这个问题。
我使用名为 MainView 的 UITableViewController 自定义类启动了一个应用程序。
在界面生成器中,我修改了视图,以便在顶部有一个文本框和一个按钮以及一个 UITableView。将数据源和委托连接到 MainView 类,并在所有代码中编程以将文本字段用作搜索字段,将按钮用作搜索触发器,然后在适当的委托方法中编程以填充 UITableView。这非常有效。
现在下一步是使用
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
方法能够显示带有与所选行相关的链接的 web 视图。所以阅读我看到我需要添加一个 UINavigationController 混合(以便获得工具栏和导航栏等)。
现在我尝试了这个: 从 Interface builder 添加一个导航控制器,并连接到 appdelegate 和一个 outlet
#import
@interface ComparateurAppDelegate : NSObject
UIWindow *window;
UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@end
然后在实现中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
这启动正常,和以前一样,我没有我应该有的顶部栏。另外,当我尝试在其中推送新视图时,它什么也没做。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
WebViewController *wvc = [[WebViewController alloc] initWithNibName:@"WebViewController.nib" bundle:nil];
[self.navigationController pushViewController:wvc animated:YES];
[wvc release];
我知道代码正在运行,因为我 nslog 它。但什么都没有发生。 WebViewController.nib 是我创建的 nib 文件(现在为空),因此我使用 UIwebview 填充它。
我现在的猜测是视图层次结构没有设置好。
所以我尝试了一些我记不太清的东西,并将工具栏放在我已经拥有的窗口的顶部,但是所有内容都无法访问(比如工具栏是模态对话框而我无法使用底部一个,或者像一个透明视图,您可以在下面看到堆叠的第一个窗口)。 我还尝试像这样以编程方式在 appDelegate 中创建 UINavigation 控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// Override point for customization after application launch.
UIViewController *rootController = [[MainView alloc]init];
navigationController = [[UINavigationController alloc]initWithRootViewController:rootController];
[rootController release];
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
return YES;
我得到的只是一个用于界面的空 UITableView,而不是 MainView.nib(其类设置为 MainView)。
TL;DR: 有一个正在运行的应用,想要添加详细视图,并且需要修改为 UINavigationController,但似乎找不到正确的方法。
提前致谢,很抱歉发了这么长的帖子。
【问题讨论】:
有细节的长篇文章胜过没有细节的短篇文章。 【参考方案1】:尝试改变这个:
UIViewController *rootController = [[MainView alloc]init];
到这里:
UIViewController *rootController = [[MainView alloc]initWithNibName:@"MainView" bundle:nil];
【讨论】:
感谢您的回复,我试过了,现在我得到了这个错误。2011-01-07 14:20:42.875 Comparateur[46985:207] *** 终止应用程序到期未捕获的异常“NSUnknownKeyException”,原因:“[<mainview> setValue:forUndefinedKey:]:此类不符合键委托的键值编码。” </mainview>
这个,我必须在 IB 中移动视图才能将视图放入控制器中。以上是关于IOS 如何更改现有 UI 以使用新的导航控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何从“菜单”视图控制器在现有 UIViewControllers 之间导航?