请原谅我在IOS中的新功能,但是当我点击工具栏中的按钮时,我正在尝试切换视图控制器。对于我的工具栏,我已经覆盖了UIToolbar并绘制了我自己的自定义工具栏。我有四个按钮,每个按钮都有自己的动作:
NSMutableArray *toolbarItems = [@[] mutableCopy];
[toolbarItems addObject:[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"notifications"] style:UIBarButtonItemStyleBordered target:self action:@selector(viewNotifications)]];
我希望能够做到这样的事情:
-(void)viewNotifications
{
NSLog(@"CustomUIToolbar::viewNotifications");
//layoutFlow....
// Show the notifications view controller
NotificationsViewController *rootViewController = [[NotificationsViewController alloc] initWithCollectionViewLayout:layoutFlow];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
[self presentViewController:navController animated:YES completion:NULL];
}
问题显然是UIToolbar无法直接访问切换视图控制器。有没有办法从自定义UIToolbar中访问presentViewController方法或类似的东西?
答案 0 :(得分:1)
创建协议和委托,并让UIViewController
创建委托的UIToolBar
工具。
当用户按下UIBarButtonItem
时,您会向代理发送消息(主UIViewController
)并在那里处理UINavigationController
代码。
@protocol ToolBarProtocol <NSObject>
-(void)didPressButton1;
@end
@property (nonatomic) id <ToolBarProtocol> delegate
创建UIToolBar
时:
YourToolBar *toolbar = [YourToolBar alloc] init];
toolbar.delegate = self;
在你的方法改变中告诉代表会发生什么:
-(void)viewNotifications
{
NSLog(@"CustomUIToolbar::viewNotifications");
//layoutFlow....
if ([self.delegate respondsToSelector:@selector(didPressButton1)])
{
[self.delegate didPressButton1];
}
}