将在Interface Builder中创build的UITabBarController设置为委托

我使用Tab Bar模板创build了我的iOS应用程序,所以这里是带有条形button的UITabBarController。 一个问题是如何将其设置为委托。 我在SO发现它必须在AppDelegate中以编程方式设置,但是我相信这是不可能的,因为我没有访问Tab Bar Controller作为sockets。

我添加了@interface (ViewController和AppDelegate)的适当值,但不知道下一步该怎么做。

 @interface ViewController : UIViewController <UITabBarControllerDelegate> 

我希望我不必摆脱整个应用程序模板,并可以将在IB中创build的Tab Bar Controller设置为委托。

正是我想让它委托创build选项卡上select这样的事件:

 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController; 

任何想法?

我不记得Xcode的标签栏模板设置,但在您的AppDelegate中,您可以访问您的窗口的rootViewController ,将其转换到UITabBarController ,然后将其委托设置到您的AppDelegate或任何其他视图控制器。

像这样的东西:

 UITabBarController *tabBarController = (UITabBarController *)[[self window] rootViewController]; [tabBarController setDelegate:self]; // In this example your app delegate would implement the UITabBarControllerDelegate protocol. 

编辑

如果你想设置你的ViewController实例作为委托:

 UITabBarController *tabBarController = (UITabBarController *)[[self window] rootViewController]; // I assume you have your ViewController instance set as the first view controller of your tab bar controller // No need for a cast here since objectAtIndex: returns id, but of course you must implement the UITabBarController protocol in your ViewController. [tabBarController setDelegate:[[tabBarController viewControllers] objectAtIndex:0]]]; 

编辑2从你的ViewController本身,你可以设置标签栏控制器的代表作为rdelmar评论。 请记住,这不能在init方法中完成,因为视图控制器还不在标签栏控制器中。 适当的地方将是viewDidLoad但是它不会被执行,直到ViewController视图加载…

 self.tabBarController.delegate = self; 

您可以快速轻松地创build一个新的TabBarController委托类,并将其作为故事板中的委托来连接。

  1. 创build一个新的类:

    类TabBarControllerDelegate:NSObject,UITabBarControllerDelegate {

  2. 在IB中,将对象库中的对象添加到左侧的View Controller列表中(注意:search“对象”,这是一个黄色的立方体)。

  3. 将此对象的类(IB中的黄色立方体)更改为TabBarControllerDelegate

  4. 在IB中导航到您的标签栏控制器场景。 从连接检查器中,将代表圈拖到您在步骤3中添加的新对象。

  5. 在你的TabBarControllerDelegate类中实现你的委托方法。 完成!

     func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController)->Bool { println("Selected a new tab") 

    }

怎么样创build一个viewController可以说MyTabController子类UITabBarController

 @interface MyTabController : UITabBarController<UITabBarControllerDelegate> 

并将你的storyboard控制器的类设置为MyTabController而不是UITabBarController ,然后把self.delegate = self; 在你的viewDidLoad

实行:

 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController; 

在这里,你是。

编辑:

如果你发现self.delegate = self; 奇怪的是,你可以在你的MyTabController创build一个sockets

 IBOutlet UITabBarController *tabBarController; and connect it to the tab controller in your storyboard. 

然后你可以把tabBarController.delegate = self;

0行代码

拖动一个对象并将其子类化

IB对象

  1. Xcode>显示文件检查器>自定义类。
  2. TabBarControllerDelegate

将委托设置为该对象

链接到IB中的对象


把你现有的代码放在那个对象中

这是您当前的UITabBarControllerDelegate 已有的代码。

 class TabBarControllerDelegate: NSObject, UITabBarControllerDelegate { // Delegate code goes here }