我用Tab Bar模板创建了我的iOS应用程序,所以这里是带条形按钮的UITabBarController。问题是如何将其设置为委托。我发现它必须在AppDelegate中以编程方式设置,但我认为这是不可能的,因为我无法访问Tab Bar Controller作为插座。
我为@interface
(ViewController和AppDelegate)添加了适当的值,但不知道下一步该做什么。
@interface ViewController : UIViewController <UITabBarControllerDelegate>
我希望我不必摆脱整个应用模板,并且可以将IB中创建的标签栏控制器设置为委托。
我想让它委托创建像这样的tab select事件:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;
有什么想法吗?
答案 0 :(得分:8)
您可以快速轻松地创建新的TabBarController Delegate类,并将其作为故事板中的委托进行连接。
创建一个新类:
class TabBarControllerDelegate:NSObject,UITabBarControllerDelegate {
在IB中,将对象库中的对象添加到左侧的View Controller列表中(注意:搜索&#34;对象&#34;,它是黄色立方体)。
将此对象的类(IB中的黄色多维数据集)更改为TabBarControllerDelegate
在IB中导航到标签栏控制器场景。从Connection Inspector中,将委托圈拖到您在步骤3中添加的新对象。
在TabBarControllerDelegate类中实现委托方法。完成!
func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController)->Bool {
println("Selected a new tab")
}
答案 1 :(得分:5)
我不记得确切地设置了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;
答案 2 :(得分:5)
拖动一个Object并将其子类化
答案 3 :(得分:3)
如何创建viewController
让我们说MyTabController
子类UITabBarController
@interface MyTabController : UITabBarController<UITabBarControllerDelegate>
并将您storyboard
中的标签Controller类设置为MyTabController
而不是UITabBarController
,然后将self.delegate = self;
放入viewDidLoad
实现:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;
在这里。
修改强>
如果您发现self.delegate = self;
很奇怪,可以在MyTabController
IBOutlet UITabBarController *tabBarController; and connect it to the tab controller in your storyboard.
然后你可以放tabBarController.delegate = self;