无法设置我的 UITabbar 的代表

Posted

技术标签:

【中文标题】无法设置我的 UITabbar 的代表【英文标题】:Cant set the Delegate of my UITabbar 【发布时间】:2013-08-28 11:11:55 【问题描述】:

我的 Storyboard 中有一个简单的 TabBar-Controller。 ViewController 1 周围有一个导航控制器。 ViewController 2 没有。

App启动时首先显示ViewController 1。

我需要实现以下方法:

-(void)tabBar:(UITabBar *)tabBar didSelectItem(UITabBarItem *)item

但我无法设置 UITabBar 的委托。我想在 ViewController 1 中设置 Deleagte。在 IB 中,我可以显示委托属性,但我不能画线。我试图以编程方式设置委托。但无论我在哪里设置,应用程序总是崩溃。 那么我必须在哪里设置我的 UITabBar 的代表?

【问题讨论】:

viewcontroller1 是第一个选项卡的根控制器吗? 没错,就是rootViewController 【参考方案1】:

您应该让 App Delegate 成为标签栏的代表。您应该能够从情节提要中的选项卡栏控制器拖动到 AppDelegate(可能是文件的所有者)。

在代码中,您可以获得对标签栏控制器的引用并在didFinishLaunchingWithOptions: 中设置tbc.delegate = self

在这两种情况下,请确保首先通过在接口声明中添加<UITabBarControllerDelegate> 使委托侦听委托方法。

【讨论】:

我再次检查了它,我无法在我的故事板中画一条线。而且我的 Soryboard 文件的左侧没有显示文件所有者。在我的 AppDelegate.h 我把行 @interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarDelegate, UITabBarControllerDelegate> 和在.m 文件中我写了 MyTabBarController *tbc = [MyTabBarController alloc] init];tbc.delegate = self; 我实现了方法 - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 应用程序不会崩溃但没有效果 您是否已将 tbc 作为 rootviewcontroller 添加到 self.window 中?像 self.window.rootviewcontroller = tbc; 天啊,我做了一些更改,现在我尝试撤消它们。现在tbc.delegate = self 行显示警告AppDelegate.m:18:17: Assigning to 'id<UITabBarControllerDelegate>' from incompatible type 'AppDelegate *const __strong' 在 Storyboard 文件中我可以看到 TabViewController 是 InitialView,所以它是 RootViewController,这就是你的意思吧? tbc.delegate = self 再次工作。如果我将行 self.window.rootViewController = tbc; 添加到 AppDelegate.m 我得到一个黑屏并且所有内容都消失了。【参考方案2】:

我找到了解决这个问题的方法。我所做的只是以下,我为我的 UITabBarController 创建了一个类。我将协议放入头文件中。切换到 .m 并实施 - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 方法。 就是这样。无需显式设置委托。 现在调用委托方法。

【讨论】:

以上是关于无法设置我的 UITabbar 的代表的主要内容,如果未能解决你的问题,请参考以下文章

iOS7 无法淡化 UIToolbar 或 UITabbar

UITabBar ios7 模糊无法在 iPad 3 上运行

如果在视图控制器中使用 Tabbar,如何设置主视图控制器

设置UITabBar的标题

UITabbar 项目不显示,直到单击升级到 Xcode 7

在 UITabBar 控制器上设置图像