0

我有一个导航控制器,我已经将两个视图推入其中。我想在导航栏中显示一个按钮,该按钮应显示在所有视图中。但是当我尝试这样...

UIButton *button =  [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage:[UIImage imageNamed:@"logo-57.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(backButtonClicked) forControlEvents:UIControlEventTouchUpInside];
[button setFrame:CGRectMake(-2, 0, 57, 57)];

UIBarButtonItem *btnItem = [[UIBarButtonItem alloc] initWithCustomView:button];
root_obj_ab.navigationItem.rightBarButtonItem = btnItem;

它在我正在编写代码的本地视图中添加。如何为所有视图设置按钮?

TIA

4

4 回答 4

1

如果不想以编程方式将相同的按钮添加到所有导航项,则应在导航栏上写一个类别,您需要在其中添加按钮 uibarbuttonitem。同样的故事就像在 IOS 之前更改导航栏的背景颜色一样5.0。

于 2012-08-10T07:03:28.280 回答
0

如何创建一个具有此按钮的自定义视图控制器,然后将所有视图控制器作为该自定义视图控制器的子类?

于 2012-08-10T07:03:43.540 回答
0

您必须将此代码放在所有视图控制器中才能在整个应用程序中工作。

于 2012-08-10T07:03:58.047 回答
0

我认为这个问题更多地与设计模式有关。Ricard Pérez del Campo 以子类的方式解决了这个问题。我认为这会足够好。

但是,也许您希望一些类似的按钮以相同的方式发挥作用,但这些按钮仍然存在一些差异。然后你可以应用 Creational Pattern 来做这件事,比如 Factory Method Pattern,或者使用Builder Pattern

希望这对您的设计有所帮助。

为了演示示例,也许您可​​以这样做:

// Code in a CustomButtonFactory class
    + (UIBarButtonItem *)getCustomBackButtonItemForTarget:(id)target selector:(SEL)sel
    {
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button setBackgroundImage:[UIImage imageNamed:@"logo-57.png"] forState:UIControlStateNormal];
        [button addTarget:target action:sel forControlEvents:UIControlEventTouchUpInside];
        [button setFrame:CGRectMake(-2, 0, 57, 57)];

        UIBarButtonItem *btnItem = [[UIBarButtonItem alloc] initWithCustomView:button];

        return btnItem;
    }

如果您不想每次都实现选择器并且非常确定每个这样的按钮都会以相同的方式起作用,您可以在工厂类中实现该方法。

于 2012-08-10T07:29:15.150 回答