0

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

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;
    }
}

详细(标签栏):

@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)

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

谢谢,

小号

4

3 回答 3

0

看起来您的标签栏控制器是nil. 也许没有与故事板正确链接?

于 2013-03-15T21:35:13.757 回答
0

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

这是因为您的控制器现在由情节提要控制,并且它必须保持状态等。

请注意,您需要在情节提要编辑器中为您的 segues 提供一个 ID,并且您不能使用自己的 init,而是必须重写prepareForSegue:sender:以注入属性。

祝你好运。

于 2013-03-16T12:25:27.763 回答
0

问题是无法获得指向 Tabbar 控制器的确切指针。

我删除了导航控制器,只留下了标签栏控制器。还删除了[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;
于 2013-03-17T19:07:02.840 回答