我用Google搜索广泛,但一切都非常令人困惑。我需要它,所以当标签栏切换到另一个视图控制器时,是否有一个方法在视图控制器即将切换时调用,获取目标控制器并设置一些变量以向MKMapView添加一些注释。我怎么能这样做?
答案 0 :(得分:0)
有很多选项,但其中一个是实现UITabBarControllerDelegate
协议,然后将实现它的类设置为UITabBarController
的委托。代表收到消息- tabBarController:didSelectViewController:
在该方法中,您可以通过查看最后一个视图控制器和下一个视图控制器来实现所需的行为。要从您的委托访问这些视图控制器,您可能需要将它们作为weak
属性添加到您的委托类。您还可以通过其UITabBarController
属性访问所有viewControllers
的子视图控制器,该属性是一组视图控制器。
答案 1 :(得分:0)
在使用委托方法进行一些实验后,我找到了答案。
我使用了- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
方法。
这感觉就像是一个相当不错的替代品,因为你可以轻松获得每个控制器。
警告:此方法不应用于处理大块代码,而应设置视图控制器以运行大量代码。
测试实施:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
FirstViewController *currentController = (FirstViewController *)[tabBarController selectedViewController];
SecondViewController *destinationController = (SecondViewController *)viewController;
// If you want, do some code on these here. For more precision, read on.
return YES;
}
这可以与逻辑一起使用来确定是否应该执行某些特定代码:EX:
if ([[tabBarController selectedViewController] class] == [FirstViewController class]) {
if ([viewController class] == [SecondViewController class]) {
// It is going from first to second. Do some code here.
}
}
此外,您必须设置代理
TabBarController .h
@interface TabBarController : UITabBarController<UITabBarControllerDelegate>
...
TabBarController .m
...
- (void)viewDidLoad
{
self.delegate = self;
}
...