无法设置我的 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 上运行