为什么self.navigationController不会pushViewController工作?

时间:2010-11-19 04:03:48

标签: ios objective-c uinavigationcontroller

我有一个

  

UIViewController-> UINavigationBar + UITableView

再解释一下

我是通过UIBuilder实现的。

1:使用XIB文件创建了新的UIViewController 2:使用UIBuiler我添加UINavigationController
3:然后我将UITableView放在navigationBar下面  所以它给了我..

  

答:UIViewController-> UINavigationBar + UITableView

现在我正在从Web服务加载UITableView中的数据,该工作正常。

我再次使用sam配置创建了一个xib,这是

  

B:UIViewController-> UINavigationBar + UITableView

所以现在当我尝试使用下面的代码在视图A上推视图B时...它根本不会工作...

SelectSiteViewController *siteViewController = [[SelectSiteViewController alloc] initWithNibName:@"SelectSiteViewController" bundle:nil];

[self.navigationController pushViewController:siteViewController animated:YES];

当我查看UINavigationController *nav = self.navigation

nav是0x0,我假设是NIL。

有谁能告诉我这里有什么不对的..为什么它没有......我怎么能让它发挥作用..

非常感谢....我真的很感激任何帮助

4 个答案:

答案 0 :(得分:3)

在UIBuilder中验证文件所有者是否引用了UINavigationController。

答案 1 :(得分:2)

知道了。

我稍微改变了架构。

我用它的xib创建了一个New UIViewController类。并编码新的UINavigationController。

- (void)viewDidLoad {
[super viewDidLoad];
    UINavigationController *navigationController
navigationController = [[UINavigationController alloc] init];
[self.view addSubview:navigationController.view];   


switch (whichViewController) {
    case 1:
        viewController = [[xxxx alloc] init];           
        break;
    case 2:
        viewController = [[xxx1 alloc] init];           
        break;
    default:
        break;
}

[navigationController pushViewController:viewController animated:NO];
[viewController release];

}

并在Switch Statement中推送视图....

我希望这有道理......

谢谢jamihash

答案 2 :(得分:1)

所以你要将tableview添加到导航控制器吗?这是如何:

tableView = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];

navigationController = [[UINavigationController alloc] init];

[navigationController pushViewController:tableView animated:NO];

将tableview作为根视图添加到导航控制器。如果你想推动另一个viewcontroller使用

然后选择一行
self.navigationController pushViewController: newViewController animated:YES]; 
在didSelectRowAtIndex方法中。

注意:它的UITableViewController * tableView和UINavigationController * navigationController通过声明。因此,为您的表格编码。

答案 3 :(得分:0)

为什么UIViewController-> UINavigationBar + UITableView?

我建议你采用另一种方法 - > UITableViewController A - >嵌入了导航控制器,然后在填充tableview后可以传递数据 - > UITableViewController B by [[self storyboard] instantiateViewControllerWithIdentifier:@“ControllerB”];

然后,在故事板中,删除一个tableView B并在Identity-> storyboard Id中添加一些id。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath   *)indexPath
{
NSString *sUrl= @"<#string#>";
if (indexPath.row == 0) sUrl= @"http://www.apple.com/";
if (indexPath.row == 1) sUrl= @"http://www.google.com/";
if (indexPath.row == 2) sUrl= @"http://www.times.uk/";

NSMutableArray *selectedObject = [arrayOpenMale objectAtIndex:0];
NSLog(@"%@ is the selected object.",selectedObject);

SeriesAdetailVC *dvc = [[self  storyboard]instantiateViewControllerWithIdentifier:@"DetailView"];
dvc.strings7 = [NSURL URLWithString:sUrl];

[self.navigationController pushViewController:dvc animated:YES];

}

希望帮助