我的视图控制器中有一个工作的UITableView。它正在成功填充,似乎没问题。但是,当我尝试使用以下函数时,不会加载新视图(函数被调用,我从NSLog输出):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"asf");
[self.navigationController pushViewController:sendRequestFavoriteController animated:YES];
}
可能有什么问题?我没有编译或调试错误/警告。
编辑:我尝试手动分配和初始化视图控制器。我相信Plamen是对的,因为self.navigationController是零。但是,我还没有成功。
EDIT2:我在应用程序的其余部分成功使用[self.navigationController pushViewController:..函数。这是唯一的例外。当我有UITableView时,navigationController是nil。这是为什么?怎么办?
alt text http://files.droplr.com/files/11625842/AUk9W.Screen%20shot%202010-03-14%20at%2009.56.42.png
答案 0 :(得分:3)
您应该使用 UINavigationController
。那是你的问题。您需要初始化 sendRequestFavoriteController
。除了将其声明为财产之外,还有更多工作要做。这不仅仅是为你“神奇地创造”这个对象。您通常会在将此对象推入堆栈之前创建此对象,如下所示:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"asf");
SendRequestFavoriteController *aController = [[SendRequestFavoriteController alloc] initWithNibName:@"theNameOfTheNib" bundle:nil];
self.sendRequestFavoriteController = aController;
[aController release];
[self.navigationController pushViewController:sendRequestFavoriteController animated:YES];
}
但我认为没有必要将sendRequestFavoriteController
声明为ivar。这样你就可以做到这一点(并摆脱你的财产和ivar):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"asf");
SendRequestFavoriteController *aController = [[SendRequestFavoriteController alloc] initWithNibName:@"theNameOfTheNib" bundle:nil];
[self.navigationController pushViewController:sendRequestFavoriteController animated:YES];
[aController release];
}
要使用UINavigationController
,您需要将当前UIViewController
替换为UINavigationController
,其中包含UIViewController
。{
1}}
请查看Apple的View Controller Programming Guide
编辑:“当前”是指选中的标签“历史”。或者你正在谈论的任何视图控制器。
答案 1 :(得分:1)
您的桌面视图是否在UINavigationController
堆栈中?否则navigationController
属性将为nil(并且方法调用将不执行任何操作)。
答案 2 :(得分:0)
试试这个
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"asf");
sendRequestFavouriteController *sendRequest=[[sendRequestFavouriteController alloc]initWithNibName:@"sendRequestFavouriteController" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:sendRequest animated:YES];
[sendRequest release];
}
所有最好的
答案 3 :(得分:0)
ChriB是对的。这是他的评论:
您确定在那里使用UINavigationController作为“历史记录”标签吗?在这个UINavigationController里面你的UIViewController? - ChriB
问题是我应该在主视图中添加UINavigationController(在Interface Builder中),然后在UIViewController里面。我的错误是直接添加UIViewController。