将UIViewController添加到UINavigationController时出现问题

时间:2011-06-10 17:20:37

标签: objective-c ios4 uinavigationcontroller xcode4

我的RootViewController是一个UITableViewController。以编程方式添加了UINavigationController:

_navigationController = [[[UINavigationController alloc] initWithRootViewController:_rootViewController] autorelease];
[self.window addSubview:_navigationController.view];
[self.window makeKeyAndVisible];

在RootViewController.m中,选择行时应加载DetailViewController:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSLog(@"Switch to detail");
  CCouchDBDocument *selectedObject = [self.contentsList objectAtIndex:indexPath.row];
  DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
  [self.view addSubview:detailViewController.view];
  [detailViewController setDetailItem: selectedObject]; 
  [self.navigationController pushViewController:detailViewController animated:YES];
  [detailViewController release];
}

没有addSubView,屏幕上没有任何反应。我以前见过的所有例子都只使用pushViewController。并且,加载DetailView大约需要4秒。这太长了(它目前是空的,只有一个标签)。当我尝试设置navigationTitle(self.title = @“Hello”;)时,标题在RootViewController中保持不变,因此navigationController必定存在错误。

我尝试将所有内容放入AppDelegate并使用switchView方法。问题是调用setDetailItem,如果我使用switch方法,我就无法调用它。

将DetailView从RootViewController加载到导航堆栈中的正确方法是什么?稍后可能会从DetailViewController加载更多?

更新 我从一开始就使用基于Window的应用程序重新开始。添加了一个UITableViewController作为“RootViewController”,并使用AppDelegate中的UINavigationController对其进行了初始化(在XIB中完全没有任何内容)。当我尝试设置self.navigationController.title = @“Test”;在ViewDidLoad中,没有任何反应。

那里有什么问题?

1 个答案:

答案 0 :(得分:1)

使用self.title使用UINavigationController显示时,不设置DetailView的标题,需要在DetailView初始化程序中设置UINavigationItem标题属性。

e.g。在DetailView初始化程序中: -

self.navigationItem.title = @"Hello";

你说得对,你不需要将detailViewController视图添加为当前视图的子视图 - 你应该只需要pushViewController调用。我不确定为什么它不会出现。

明显的问题是nib中的所有内容都连接好了,DetailView初始化程序做了什么?