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

7 iphone delegates uitabbarcontroller ios

我用Tab Bar模板创建了我的iOS应用程序,所以这里是带条形按钮的UITabBarController.问题是如何将其设置为委托.我发现它必须在AppDelegate中以编程方式设置,但我相信这是不可能的,因为我无法访问Tab Bar Controller作为插座.

我添加了适当的值@interface(ViewController和AppDelegate),但不知道接下来该做什么.

@interface ViewController : UIViewController <UITabBarControllerDelegate>
Run Code Online (Sandbox Code Playgroud)

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

我想让它委托创建选项卡选择事件,如下所示:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;
Run Code Online (Sandbox Code Playgroud)

任何的想法?

lee*_*ger 8

您可以快速轻松地创建新的TabBarController Delegate类,并将其作为故事板中的委托进行连接.

  1. 创建一个新类:

    class TabBarControllerDelegate:NSObject,UITabBarControllerDelegate {

  2. 在IB中,将对象库中的对象添加到左侧的View Controller列表中(注意:搜索"对象",它是黄色立方体).

  3. 将此对象的类(IB中的黄色多维数据集)更改为TabBarControllerDelegate

  4. 在IB中导航到标签栏控制器场景.从Connection Inspector中,将委托圆拖动到您在步骤3中添加的新对象.

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

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

    }


e19*_*985 5

我不记得确切地设置了Xcode的Tab Bar模板,但在AppDelegate中,您可以访问窗口rootViewController,将其转换为a UITabBarController,然后将其委托设置为AppDelegate或任何其他视图控制器.

像这样的东西:

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

编辑

如果要将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]]];
Run Code Online (Sandbox Code Playgroud)

编辑2从ViewController本身,您可以将标签栏控制器的委托设置为rdelmar注释.请记住,这不能在init方法中完成,因为视图控制器还没有在标签栏控制器中.适当的位置,viewDidLoad但因此在ViewController视图加载之前不会执行...

self.tabBarController.delegate = self;
Run Code Online (Sandbox Code Playgroud)


Swi*_*ect 5

0行代码

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

IB对象

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

将委托设置为该对象

链接到IB中的对象


将您现有的代码放在该对象中

这是你的代码已经在您的当前UITabBarControllerDelegate

class TabBarControllerDelegate: NSObject, UITabBarControllerDelegate {
    // Delegate code goes here
}
Run Code Online (Sandbox Code Playgroud)