通用工具栏和选择器。我需要每次都复制代码吗?

Posted

技术标签:

【中文标题】通用工具栏和选择器。我需要每次都复制代码吗?【英文标题】:Common toolbar and selectors. Do I need to copy the code every time? 【发布时间】:2013-04-23 15:02:06 【问题描述】:

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

@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 类中,因此,我需要让它出现在添加该工具栏的视图控制器中。我考虑过使用委托方法,但这意味着我必须复制代码以在具有此自定义工具栏的每个视图控制器中显示相机。有什么想法吗?!

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于通用工具栏和选择器。我需要每次都复制代码吗?的主要内容,如果未能解决你的问题,请参考以下文章

通用选择器 * 和伪元素

CSS选择器详解通用选择器和高级选择器

子选择器后代选择器和通用选择器以及伪选择器

每次构建项目时如何避免构建和构建通用框架?

C ++中的复制构造函数和=运算符重载:通用函数可能吗?

Maven介绍与安装配置