苹果手机。 UITableView和推送视图控制器

时间:2010-03-14 09:00:56

标签: iphone uitableview uinavigationcontroller

我的视图控制器中有一个工作的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

4 个答案:

答案 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。