从UIToolbar子类切换视图控制器

时间:2014-07-17 12:21:06

标签: ios iphone objective-c

请原谅我在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方法或类似的东西?

1 个答案:

答案 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];
    }
}