如何向 UINavigationBar 添加按钮

Posted

技术标签:

【中文标题】如何向 UINavigationBar 添加按钮【英文标题】:How To add buttons to UINavigationBar 【发布时间】:2012-08-22 14:58:37 【问题描述】:

我需要这样的东西 http://anishusite.appspot.com/hbimgs/Bills220.png

能够从导航栏中更改日期...这是如何完成的? 我尝试添加一个带有 thou 按钮的工具栏和一个带有日期标签的视图,但效果不是很好

http://osmorphis.blogspot.ro/2009/05/multiple-buttons-on-navigation-bar.html

代码如下:

  //first create the view 
UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 6, 157, 33)];
[titleView setBackgroundColor:[UIColor clearColor]];

//add the buttons to the view
UIButton *prevButton = [UIButton buttonWithType:UIButtonTypeCustom];
[prevButton setFrame:CGRectMake(0, 1, 32, 32)];
[prevButton setBackgroundImage:[UIImage imageNamed:@"36-circle-west"] forState:UIControlStateNormal];
[prevButton addTarget:self action:@selector(prevMonth) forControlEvents:UIControlEventTouchUpInside];
[titleView addSubview:prevButton];


UIButton *nextButton = [UIButton buttonWithType:UIButtonTypeCustom];
[nextButton setFrame:CGRectMake(145, 1, 32, 32)];
[nextButton setBackgroundImage:[UIImage imageNamed:@"20-circle-east"] forState:UIControlStateNormal];
[nextButton addTarget:self action:@selector(nextMonth) forControlEvents:UIControlEventTouchUpInside];
[titleView addSubview:nextButton];

[self.dateLabel setFrame:CGRectMake(33, 1, 90, 33)];
[self.dateLabel setBackgroundColor:[UIColor clearColor]];
[self.dateLabel setTextAlignment:UITextAlignmentCenter];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterNoStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateFormat:@"MMMM,YYYY"];
NSString *dateString = [dateFormatter stringFromDate:self.beginDate];
NSLog(@"the title date string: %@",dateString);

[self.dateLabel setText:dateString];
[self.dateLabel setTextColor:[UIColor whiteColor]];
[self.dateLabel setBackgroundColor:[UIColor clearColor]];
[self.dateLabel setFont:[UIFont fontWithName:@"System" size:17.0]];

//create the toolbar itself

UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 240, 44)];
[toolbar setBackgroundColor:[UIColor clearColor]];

NSMutableArray *items  = [NSMutableArray arrayWithCapacity:3];

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addTransaction)];
addButton.style = UIBarButtonItemStyleBordered;


UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

UIBarButtonItem *theView = [[UIBarButtonItem alloc] initWithCustomView:titleView];

[items addObject:theView];
[items addObject:spacer];
[items addObject:addButton];

[toolbar setItems:items animated:NO];

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:toolbar];

http://www.shareimages.com/image.php?61601-qpyWmpSfk5.kmpyWmak-screen.png

如您所见,它看起来不太好。标签未显示...这些按钮似乎只有在上半部分点击时才起作用。 (当被点击时,这些方法被称为 ok )......有什么想法吗?顺便说一句,导航栏有一个背景图片,但是工具栏把它盖住了..为什么?我用清晰的彩色背景制作了工具栏......

【问题讨论】:

什么不起作用?您是否添加了单击按钮后更改日期的方法? 【参考方案1】:

UINavigationItem 有一个 titleView 属性。您可以将其设置为您创建的任何视图。因此,创建一个具有透明背景的 UIToolbar 子类,向其中添加按钮和文本标签,然后:

self.navigationItem.titleView = myCustomView;

其中 myCustomView 是包含箭头按钮和标签的视图。这个视图可以是 UIToolbar 子类,阅读 Couldn't UIToolBar be transparent? 了解创建透明 UIToolbar 子类的技巧,然后添加按钮:

flex spacer,左箭头,带有堆叠 UILabel 的自定义视图,右箭头,flex spacer

【讨论】:

不能很好地工作...按钮似乎没有响应并且看起来很糟糕...将发布代码...

以上是关于如何向 UINavigationBar 添加按钮的主要内容,如果未能解决你的问题,请参考以下文章

向 UINavigationBar 添加搜索按钮:Swift

从多个视图向 UINavigationBar 添加和删除 UIBarButtonItems

UINavigationBar 在中断从左边缘手势向右滑动后显示返回按钮,如何隐藏它以及为啥显示它?

如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar?

如何以编程方式在其上添加 UINavigationBar 和后退按钮

按下 UINavigationController 后如何将编辑按钮添加到 UINavigationBar