我想知道是否可以通过编程方式从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];
答案 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];