没有调用didSelectViewController方法(带故事板)

wha*_*awk 3 storyboard uitabbarcontroller ios ios5

我有两个版本的选项卡式ios5应用程序,一个使用故事板创建,一个使用xib文件.故事板版本不调用该UITabBarControllerDelegate方法didSelectViewController(xib版本).(我认为)故事板中缺少某些东西,但我不知道是什么.构建问题的另一种方法可能是 - 如何引用UITabBarController故事板实例化的对象?

谢谢你的帮助.

编辑:标签栏控制器委托设置:

在AppDelegate.h中:

@interface MyAppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
@property (strong, nonatomic) UITabBarController *tabBarController;
Run Code Online (Sandbox Code Playgroud)

在AppDelegate.m中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.tabBarController.delegate = self;
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

然后在AppDelegate.m中,委托方法是:

- (void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"Got Here");
}
Run Code Online (Sandbox Code Playgroud)

NSLog输出永远不会出现.在我看来,问题是我没有正确引用已经由故事板实例化的标签栏控制器对象.我怎么做?

Car*_*ine 8

我有这个问题.

如果你不使用故事板,设置UITabBarController在委托AppDelegate是要走的路.然而,有了Storyboards,AppDelegate不知道在哪里tabBarController启动.你会觉得受subclassingtabBarController并添加委托方法:

(void)tabBarController:(UITabBarController *)tabBarController
   didSelectViewController:(UIViewController *)viewController {

}
Run Code Online (Sandbox Code Playgroud)

......就够了.但是,这令人恼火.

我需要知道用户何时按下了一个标签按钮.我需要知道更多,我需要知道viewController的" - (void)viewWillDisappear:(BOOL)animated {} "方法已经运行.

我决定让自己UITabBarController成为代表.这对我来说似乎很傻,但我做了以下......

#import <UIKit/UIKit.h>

@interface PlumbsTabBarController : UITabBarController <UITabBarControllerDelegate>

@end
Run Code Online (Sandbox Code Playgroud)

然后,在我的viewDidLoad方法中,写了以下内容:

[self setDelegate:self];
Run Code Online (Sandbox Code Playgroud)

这使我的标签栏委托方法能够运行.

疯狂还是什么?

好的 - 我现在正在编辑这个答案,因为即使上面的内容都是正确的,navigationController正在使用a,每次tabBarButton触摸didSelectViewController都会选择,当你试图NSLog(@"%@", viewController);只显示你选择了这个UINavigationController类时,委托方法会是这样吗?

因此,总体解决方案,只是为了增加更多的复杂性,就是在触摸时为你想监视的UINavigationController每一个viewController(做某事)创建子类tabBarbutton.

无论如何它对我有用.并且,如果任何人都可以通过上述运球挑选,他们可能会找到一个有用的方面 - 这对我来说足够了 - 看到我发现这个网站也非常有用.


nul*_*ull 6

放入[self setDelegate:self];ViewDidLoad或初始化对象的地方