创建tabbarcontroller
作为splitview控制器的详细视图。我可以通过点击模拟器上的item1
,item2
图标来更改视图,但无法以编程方式更改视图。
我尝试在null
中打印viewcontrollers
时收到nslog
。
在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)
如何以编程方式更改视图?
谢谢,
取值
答案 0 :(得分:0)
您的标签栏控件看起来像nil
。也许与故事板没有正确联系?
答案 1 :(得分:0)
您需要在当前控制器上使用performSegueWithIdentifier:sender:
。
这是因为你的控制器现在由故事板控制,它必须保持状态等。
请注意,您需要在情节提要编辑器中为segue指定一个ID,而不能使用自己的内容,而是必须覆盖prepareForSegue:sender:
以注入属性。
答案 2 :(得分:0)
问题是无法获得指向theTabbarcontroller的确切指针。
我删除了导航控制器并只留下了tabbar控制器。还删除了主视图和appdelegate中的[topcontroller]
个请求。
所以最终的工作代码是
的appdelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
return YES;
}
马西德威: - (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;