将在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委托类,并将其作为故事板中的委托来连接。
-
创build一个新的类:
类TabBarControllerDelegate:NSObject,UITabBarControllerDelegate {
-
在IB中,将对象库中的对象添加到左侧的View Controller列表中(注意:search“对象”,这是一个黄色的立方体)。
-
将此对象的类(IB中的黄色立方体)更改为TabBarControllerDelegate
-
在IB中导航到您的标签栏控制器场景。 从连接检查器中,将代表圈拖到您在步骤3中添加的新对象。
-
在你的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行代码
拖动一个对象并将其子类化
- Xcode>显示文件检查器>自定义类。
- 类 :
TabBarControllerDelegate
。
将委托设置为该对象
把你现有的代码放在那个对象中
这是您当前的UITabBarControllerDelegate
已有的代码。
class TabBarControllerDelegate: NSObject, UITabBarControllerDelegate { // Delegate code goes here }