在Storyboard中创build的TabbarController不能以编程方式更改视图
创build一个tabbarcontroller
作为splitview控制器的详细视图。 我可以通过在模拟器上单击item1
, item2
图标来更改视图,但不能以编程方式更改视图。
尝试在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;