单击sideNavController REFrostedViewController

时间:2016-11-09 06:46:21

标签: ios objective-c

我想知道是否可以通过编程方式从Controller1单击Controller2上的ButtonA / TabBarButton。

我的Controller1充当sideNav,所以我实际做的是当我点击某个链接时,首先,我关闭sideNav,其次,尝试点击第二个标签项。但它似乎没有用。

这是我尝试点击标签时的示例代码。

编辑:这是我的代码>

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([indexPath isEqual:[tableView indexPathForCell:self.cellToClick]])
    {
        //closes sideNav
        [self hideMenuViewController];

        //Doesn't go to tab2
         FirstController *controller1 = [FirstController new];
        controller1.tabBarController.selectedViewController = [controller1.tabBarController.viewControllers objectAtIndex:1];
    }
}

为了清楚说明,我的sideNav中有两个按钮,需要作为tabBarController的两个tabBarButtons。

示例,我单击sideNav的第一个按钮,它将关闭sideNav然后单击tabBarController的第一个Tab,依此类推。

知道这里发生了什么吗?

编辑:尝试这样做:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
    if ([indexPath isEqual:[tableView indexPathForCell:self.cellToClick]])
        {
            //closes sideNav
            [self hideMenuViewController];

            //Doesn't go to tab2


           FirstController *controller1 = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstController"];
           controller1.tabBarController.selectedViewController = [controller1.tabBarController.viewControllers objectAtIndex:1];
            }
        }

ANSWER

if ([indexPath isEqual:[tableView indexPathForCell:self.homeCell]])
    {
    [self.frostedViewController hideSideNavController];

    TabBarViewController *hmtvc = [((UINavigationController*)self.frostedViewController.contentViewController).viewControllers objectAtIndex:0];
    hmtvc.selectedViewController = [hmtvc.viewControllers objectAtIndex:0];

}

我已经在我的TabBarController中嵌入了我的NavigationController THAT 的实例。真正的问题是我起初认为我还没有实例。但是我有。我正在使用名为REFrostedViewController的第三方。它包含NavigationController的实例。

frostedViewController.contentViewController保存嵌入TabBarController的NavigationController,现在我只需要使用NavController访问TabBarController。

我是用它做的:

[((UINavigationController*)self.frostedViewController.contentViewController).viewControllers objectAtIndex:0];

然后现在我可以访问我的tabBarController的实例我刚刚选择了我想要的选项卡,在我的情况下是我使用的第二个选项卡。

hmtvc.selectedViewController = [hmtvc.viewControllers objectAtIndex:0];

2 个答案:

答案 0 :(得分:1)

您认为您的firstViewController已经创建,因此只有您可以移动标签和您可以执行的每项操作。

现在在tableView上选择了indexpath的行,你再次创建一个新的ViewController对象,这不好。

已经存在的内容并且您创建了一个新对象。

这不合适。

如果你理解了这么多,我可以解释你更多。

您需要在应用生命周期中找到tabBarController的参考。

这就是tabBarControlelr与self.frostedViewController的关联,然后你可以选择索引os = f tabBarController。

答案 1 :(得分:0)

如果您使用stroryboard

,请尝试创建您的控制器实例,如下所示
FirstController *controller1 = [self.storyboard instantiateViewControllerWithIdentifier:@"storyboard id"];

或尝试使用set tab index

[yourtabbatInstance setSelectedIndex:2];