我有一个带有4个标签的tabBar,我想在选择特定标签时执行一些操作,所以我在xxAppDelegate.m中取消注释了UITabBarControllerDelegate
我还希望在控制台中看到正在发送的值 - 以便测试我的“if”语句。然而,这是我难倒的地方。
// Optional UITabBarControllerDelegate method
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NSLog(@"%@", viewController);
}
控制台尽职地记录了已选择的任何选定控制器,但采用以下特定格式:
<MyViewController: 0x3b12950>
现在,我没想到方括号或冒号或十六进制。所以我的问题是如何格式化我的IF语句?这是我认为可行的,但我得到了进一步提到的错误。
// Optional UITabBarControllerDelegate method
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NSLog(@"%@", viewController);
if (viewController == MyViewController)
{
//do something nice here …
};
}
...错误是“MyViewController之前的预期表达式”
任何人都知道我应该这样做吗?
答案 0 :(得分:2)
您需要与特定的视图控制器实例进行比较。例如,如果在选择第二个选项卡时if语句应为true:
if (viewController == [tabBarController.viewControllers objectAtIndex:1]) {
// ...
}
答案 1 :(得分:0)
谢谢你的工作。我想你必须知道你的比较首先是什么对象。
对于阅读此代码的任何人来说,提供的代码都有效,但是您需要注意示例中的文本“tabBarController”是指实例变量(全局代码)。
为了使代码正常工作,您的视图控制器需要引用一个唯一命名的本地版本,如下所示。将其与我的原始代码进行比较。
// Optional UITabBarControllerDelegate method
- (void)tabBarController:(UITabBarController *)tabBarController_local didSelectViewController:(UIViewController *)viewController
{
//...
}
希望这有助于某人面对
Local declaration of 'tabBarController' hides instance variable
尝试实施时出现警告。
答案 2 :(得分:-1)
比较tabbarcontroller使用self时,如下所示:
if (viewController == [self.tabBarController.viewControllers objectAtIndex:1]) {
// ...
}
它将删除警告。