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)
任何的想法?
您可以快速轻松地创建新的TabBarController Delegate类,并将其作为故事板中的委托进行连接.
创建一个新类:
class TabBarControllerDelegate:NSObject,UITabBarControllerDelegate {
在IB中,将对象库中的对象添加到左侧的View Controller列表中(注意:搜索"对象",它是黄色立方体).
将此对象的类(IB中的黄色多维数据集)更改为TabBarControllerDelegate
在IB中导航到标签栏控制器场景.从Connection Inspector中,将委托圆拖动到您在步骤3中添加的新对象.
在TabBarControllerDelegate类中实现您的委托方法.完成!
func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController)->Bool {
println("Selected a new tab")
Run Code Online (Sandbox Code Playgroud)
}
我不记得确切地设置了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)
拖动一个对象并将其子类化
TabBarControllerDelegate。将委托设置为该对象
将您现有的代码放在该对象中
这是你的代码已经在您的当前UITabBarControllerDelegate。
class TabBarControllerDelegate: NSObject, UITabBarControllerDelegate {
// Delegate code goes here
}
Run Code Online (Sandbox Code Playgroud)