15

我已经尝试过这种方法 /hack:http://blog.blackwhale.at/2009/06/uibuttons-in-uinavigationbar/

问题是这留下了一个微弱的接缝。我尝试将嵌套工具栏的背景图像设置为我捕捉到的图像。那没有用。该图像未应用。我也尝试过使用嵌套的 UINavigationBar,但这似乎不起作用。

我已经在几个 iPhone 应用程序中看到了这一点。有谁知道怎么做?

[编辑] 我希望按钮看起来像普通的 UIBarButtonItems,并且能够使用 UIBarButtonSystemItemAdd、UIBarButtonSystemItemRefresh 等系统样式。我提供的链接可以做到这一点,除了你可以看到一个微弱的接缝,因为它是一个嵌套在导航栏中的 UIToolbar ..

请不要提及这违反了人机界面指南。(我们知道)。

感谢您贡献您的技巧……这是唯一的方法!

4

8 回答 8

36

iOS 5.0 现在支持多个按钮。请参阅 UINavigationItem 的 iOS 文档。具体来说,如下:

特性:

@property(nonatomic, copy) NSArray *leftBarButtonItems;
@property(nonatomic, copy) NSArray *rightBarButtonItems;
@property BOOL leftItemsSupplementBackButton;

方法:

- (void)setLeftBarButtonItems:(NSArray *)items animated:(BOOL)animated;
- (void)setRightBarButtonItems:(NSArray *)items animated:(BOOL)animated;
于 2011-11-12T20:41:31.023 回答
18

我发布了在 navigationBar 右侧添加两个按钮的代码。您可以设置barStyle = -1而不是子类化UIToolbar

于 2010-11-03T03:59:36.770 回答
6

要摆脱 UIToolbar 的背景(“接缝”),请创建 UIToolbar 的子类并覆盖 (void)drawRect:(CGRect)rect 方法。将其留空,您的 UIToolbar 将不再有背景。

刚刚在我自己的项目中使用它并且效果很好。在以下评论中发现:http: //osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html

于 2010-04-13T20:57:30.513 回答
3
UIView *parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, myWidth, myHeight)];
// make UIView customView1... (UILabel, UIButton, etc.) with desired frame and settings
[parentView addSubview:customView1];
[customView1 release];
// make UIView customView2... (UILabel, UIButton, etc.) with desired frame and settings
[parentView addSubview:customView2];
[customView2 release];
UIBarButtonItem *customBarButtomItem = [[UIBarButtonItem alloc] initWithCustomView:parentView];
[parentView release];
self.navigationItem.rightBarButtonItem = customBarButtomItem;
[customBarButtomItem release];
于 2009-09-12T11:12:54.570 回答
2

请参阅苹果网站上免费提供的 uicatalogue 示例...他们使用 uisegmented 控件显示三个按钮来代替导航栏上的右栏按钮...

于 2009-09-12T07:45:11.513 回答
1

我无法发表评论,但除了 @iworkinprogress 我还必须将 UIToolbar 背景颜色设置为清除:

    [toolbar setBackgroundColor:[UIColor clearColor]];

这也可以在http://osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html的评论中找到。

于 2010-10-04T21:06:22.663 回答
0

在 iOS 4.x 中 clearColor 似乎对 UIToolbar 没有影响,而覆盖它的 drawRect: 确实。

于 2010-11-02T11:42:31.393 回答
0

我想出了一个我在整个项目中都在使用的辅助函数。基本上,它会检查栏上是否已经有一个按钮,然后添加新按钮或将其与现有按钮合并。因此,您可以只调用一次或多次该函数:

+ (void)AddButtonToBar:(UIViewController *)controller withImage:(NSString *)imageName withAction:(SEL)action withFrame:(CGRect) frame{
    UIButton *newButton =[[UIButton alloc] init];
    [newButton setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
    newButton.frame = frame;
    [newButton addTarget:controller action:action forControlEvents:UIControlEventTouchUpInside];

    if ([[controller.navigationItem rightBarButtonItems] count] == 0)
        [controller.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:newButton]];
    else {
        NSMutableArray *existingButtons = [[NSMutableArray alloc] initWithArray:[controller.navigationItem rightBarButtonItems]];
        [existingButtons addObject:[[UIBarButtonItem alloc] initWithCustomView:newButton]];
        [controller.navigationItem setRightBarButtonItems:(NSArray *)existingButtons];
    }
}

从视图控制器调用它:

[Helper AddButtonToBar:self withImage:@"imageName.png" withAction:@selector(myAction) withFrame:CGRectMake(0, 0, 24, 24)];
于 2013-12-13T10:41:15.273 回答