在Storyboard中创build的TabbarController不能以编程方式更改视图

创build一个tabbarcontroller作为splitview控制器的详细视图。 我可以通过在模拟器上单击item1item2图标来更改视图,但不能以编程方式更改视图。

尝试在nslog打印viewcontrollers时,我得到null 。 在MasterView中:

 @property (strong, nonatomic) TabBarRootViewController *detailViewController; - (void)viewDidLoad { [super viewDidLoad]; self.detailViewController=[[TabBarRootViewController alloc] init]; //tried also self.detailViewController = (TabBarRootViewController *)[self.splitViewController.viewControllers objectAtIndex:1]; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { //this sends object info to detail if (indexPath.section==0) { //send row number NSNumber *i = [NSNumber numberWithInteger:indexPath.row]; NSLog(@"Selected index %@",i); self.detailViewController.detailItem = i; } } 

详细(Tabbar):

 @property (strong, nonatomic) id detailItem; if (self.detailItem) { NSInteger i=[self.detailItem integerValue]; NSLog(@"recieved integer is %i",i); //tried this self.tabBarController.selectedIndex=i; self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:i]; //list of viewcontrollers NSArray *array; array = [[self tabBarController] viewControllers]; NSLog(@"array %@",array); } 

在这里输入图像说明

 NSLOG: recieved integer is 1 array (null) 

如何以编程方式更改视图?

谢谢,

小号

看起来你的标签栏控制器是nil 。 也许不正确链接故事板?

您需要在当前的控制器上使用performSegueWithIdentifier:sender:

这是因为你的控制器现在由故事板控制,并且必须保持状态等。

请注意,您需要在故事板编辑器中为您的赛段提供ID,并且您不能使用自己的inits,而是必须重写prepareForSegue:sender:注入属性。

祝你好运。

问题不能得到确切的指针到Tabbarcontroller。

我删除了导航控制器,只留下了tabbar控制器。也删除了主视图和appdelegate中的[topcontroller]请求。

所以最终的工作代码是

的appdelegate:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. return YES; } 

masterview: – (void)viewDidLoad

 { [super viewDidLoad]; self.detailViewController = (TabBarRootViewController *)[self.splitViewController.viewControllers objectAtIndex:1]; } 

在tabbarcontroller(细节控制器)

 @property (strong,nonatomic) UITabBarController *rootController; self.rootController= (TabBarRootViewController *)[self.splitViewController.viewControllers objectAtIndex:1]; self.rootController.selectedIndex=i;