【问题标题】:didSelectViewController method not being called (with storyboard)未调用 didSelectViewController 方法(带有情节提要)
【发布时间】:2012-06-19 09:43:13
【问题描述】:

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

感谢您的帮助。

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

在 AppDelegate.h 中:

@interface MyAppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
@property (strong, nonatomic) UITabBarController *tabBarController;

在 AppDelegate.m 中:

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

那么稍后在 AppDelegate.m 中,委托方法是:

- (void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"Got Here");
}

NSLog 输出永远不会出现。在我看来,问题似乎是我没有正确引用已由情节提要实例化的选项卡栏控制器对象。 我该怎么做?

【问题讨论】:

  • 你设置代理了吗?你能显示一些代码吗?
  • 标签栏委托在AppDelegate.h中设置:
  • 杜你了解这个我有同样的问题。
  • 成功了吗?找到答案了吗?

标签: ios ios5 uitabbarcontroller storyboard


【解决方案1】:

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

【讨论】:

  • 你的意思是我必须在 TabBarController 的第一个 NavigationController 的第一个 ViewController 中添加上述方法?你能详细说明你的解决方案吗?
【解决方案2】:

我遇到了这个问题。

如果您不使用情节提要,则可以在 AppDelegate 中设置 UITabBarController 委托。但是,对于StoryboardsAppDelegate 不知道tabBarController 的启动位置。你会想到subclassing tabBarController 并添加委托方法:

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

}

...就足够了。但是,令人恼火的是没有。

我需要知道用户何时按下了选项卡按钮。我需要更多地了解这一点,我需要知道 viewController 的“- (void)viewWillDisappear:(BOOL)animated {} " 方法已运行。

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

#import <UIKit/UIKit.h>

@interface PlumbsTabBarController : UITabBarController <UITabBarControllerDelegate>

@end

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

[self setDelegate:self];

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

疯了还是什么?

好的 - 我现在正在编辑这个答案,即使以上内容都是正确的,在使用 navigationController 的情况下,选择每个 tabBarButton 触摸,didSelectViewController 委托方法将,当你尝试到NSLog(@"%@", viewController); 只显示你选择了UINavigationController 类?

所以,为了增加复杂性,总的解决方案是在tabBarbutton 被触摸时为您要监控的每个viewController 子类化UINavigationController(做某事)。

无论如何它对我有用。而且,如果有人能通过上面的运球来挑剔,他们可能会发现一个有用的方面——这对我来说已经足够了——因为我发现这个网站也非常有用。

【讨论】:

  • 在我的例子中,这个答案只有在 didSelectViewController 方法也在 UITabBarController 文件而不是 AppDelegate 时才有效。
猜你喜欢
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
相关资源
最近更新 更多