【发布时间】:2013-03-15 19:20:49
【问题描述】:
创建了一个tabbarcontroller 作为拆分视图控制器的详细视图。我可以通过单击模拟器上的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;
}
}
详细(标签栏):
@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)
如何以编程方式更改视图?
谢谢,
S
【问题讨论】:
-
为什么导航控制器中有标签栏控制器?以上代码在哪个控制器中?
-
@rdelmar 没有导航控制器我得到
[TabbarRootViewController topViewController]: unrecognized selector sent to instance错误。代码在TabbarRootViewController -
那就不要调用topViewController了!我认为您没有理由在那里拥有导航控制器。你在推动什么吗?如果没有,请摆脱它。 moreNavigationController 到底是什么?只有当您有超过 5 个标签时才会出现这种情况。
-
@rdelmar ok 删除了
navigation controller和topviewcontroller请求,但仍然在 nslog 中收到null。 In masterviewviewdidloadI callself.detailViewController=[[TabBarRootViewController alloc] init];and when a row selected I want to change the tabbar item to selected row index.更新了我在 masterview 中调用 tabbardetail 项的位置添加的问题 -
我无法阅读您发布的图片上的控制器名称,因此很难分辨您在说什么控制器。但是,如果 TabBarRootViewController 是情节提要中的控制器之一,则不应分配它。据我所知,这是拆分视图控制器的详细视图控制器,因此可以使用 self.splitViewController.viewControllers[1] 来引用它(索引 0 处的那个是主控制器)。您确实需要阅读 UIViewController 类参考顶部链接的 2 个文档,以了解您应该做什么。
标签: ios objective-c ipad uitabbarcontroller