flo*_*wer 2 uitabbarcontroller ios
我有许多已经报告的问题,didSelectViewController没有被调用,但在我的情况下它有时被调用.我有三个选项卡和三个视图控制器.每次用户按下第二个或第三个选项卡时,我都需要执行一些代码.在我的SecondViewController和ThirdViewController中,我有:
UITabBarController *tabBarController = (UITabBarController *)[UIApplication sharedApplication].keyWindow.rootViewController;
[tabBarController setDelegate:self];
Run Code Online (Sandbox Code Playgroud)
现在一切正常,使用SecondViewController,didSelectViewController每次按下第二个选项卡时都会调用它.同样在ThirdViewController中didSelectViewController,每次按下第三个选项卡时都会调用它,但仅在第二个选项卡未被按下时才会被调用.所以当我在FirstViewController和ThirdViewController之间来回切换时,一切正常.但是当我进入第一个 - >第二个 - >第三个模式时,则didSelectViewController不会在ThirdViewController中调用.此外,当我第一次 - >第三次 - >第二次 - >第三次didSelectViewController在第三次调用时,第一次调用而不是第二次调用.有任何想法吗?
我也有这个问题并且厌倦了它.我决定子类化UITabBarController并覆盖以下方法.我之所以这样做的原因是由于某种原因,应用程序启动setSelectedViewController:时没有被调用.
- (void)setSelectedIndex:(NSUInteger)selectedIndex
{
[super setSelectedIndex:selectedIndex];
// my code
}
- (void)setSelectedViewController:(UIViewController *)selectedViewController
{
[super setSelectedViewController:selectedViewController];
// my code
}
Run Code Online (Sandbox Code Playgroud)
很难跟着你在做什么,但是从我的理解,你是通过改变响应标签交换机UITabBarController的代表之间来回SecondViewController和ThirdViewController.
如果这是真的,我建议不要这样做.相反,我建议你尝试以下方法:
tabBarController: didSelectViewController:.SecondViewController和ThirdViewController实例的引用.如果您使用Interface Builder设计UI,则可以通过向IBOutlet委托类添加两个s并将适当的实例连接到出口来实现此目的.tabBarController: didSelectViewController:它时,可以简单地将通知转发到SecondViewController或者ThirdViewController,取决于选择了哪个选项卡.基本代码示例:
// TabBarControllerDelegate.h file
@interface TabBarControllerDelegate : NSObject <UITabBarControllerDelegate>
{
}
@property(nonatomic, retain) IBOutlet SecondViewController* secondViewController;
@property(nonatomic, retain) IBOutlet ThirdViewController* thirdViewController;
// TabBarControllerDelegate.m file
- (void) tabBarController:(UITabBarController*)tabBarController didSelectViewController:(UIViewController*)viewController
{
if (viewController == self.secondViewController)
[self.secondViewController doSomething];
else if (viewController == self.thirdViewController)
[self.thirdViewController doSomethingElse];
}
Run Code Online (Sandbox Code Playgroud)
编辑
有关如何将上面的示例代码集成到项目中的一些提示:
TabBarControllerDelegate也包含该.xib文件的.xib文件的实例TabBarControllerdelegate插座TabBarController' 连接到TabBarControllerDelegate实例secondViewController的插座TabBarControllerDelegate的SecondViewController实例thirdViewController的插座TabBarControllerDelegate的ThirdViewController实例- (void) doSomething来SecondViewController- (void) doSomethingElse来ThirdViewControllerSecondViewController并ThirdViewController更改TabBarController代理!一旦你完成所有设置并且一切正常,你可能想要清理一下:
doSomething以及doSomethingElse更合理的方式secondViewController和thirdViewController出口| 归档时间: |
|
| 查看次数: |
2712 次 |
| 最近记录: |