0

我决定在我的导航控制器中有一个自定义工具栏。为此,我创建了这个通用工具栏类,我的每个视图控制器都会将其添加到其导航项中。

@implementation MainLeftToolbar

- (id)init
{
    self = [super initWithFrame:CGRectMake(0, 0, 133, 44)];
    if(self) {
        NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:5];

        // create a standard "add" button
        UIBarButtonItem* bi = [[UIBarButtonItem alloc]
                               initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:NULL];
        bi.style = UIBarButtonItemStyleBordered;
        [buttons addObject:bi];

        // create a spacer
        bi = [[UIBarButtonItem alloc]
              initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
        [buttons addObject:bi];

        // create a standard "refresh" button
        bi = [[UIBarButtonItem alloc]
              initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh:)];
        bi.style = UIBarButtonItemStyleBordered;
        [buttons addObject:bi];

        // stick the buttons in the toolbar
        [self setItems:buttons animated:NO];
    }
    return self;
}
@end

它是这样设置的:

MainLeftToolbar *leftMenuToolbar = [[MainLeftToolbar alloc]init];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftMenuToolbar];

但是,我有按钮,其中之一是显示相机(UIPopover)。我似乎无法让相机出现在 UIToolbar 类中,因此,我需要让它出现在添加了该工具栏的视图控制器中。我考虑过使用委托方法,但这意味着我将不得不复制代码以在每个具有此自定义工具栏的视图控制器中显示相机。有任何想法吗?!

4

1 回答 1

0

好的,我可以在这里想到两个选择:

  • 为所有视图控制器创建一个基类并在那里实现委托方法。

  • 在您的自定义 MainLeftToolbar 中创建一个存储呈现视图控制器的属性MainLeftToolbar,您在每次创建工具栏时设置它,这样您就可以在类中编写通用代码。

就个人而言,我更喜欢第一种方法,这样你也可以在基础 VC 的 init 中编写一次工具栏创建代码,并且它也遵循 MVC 模式。

于 2013-04-23T15:24:08.170 回答