首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以使自定义UIBarButtonItems在工具栏中与HIG相悖?

是否有一种方法可以使自定义UIBarButtonItems在工具栏中与HIG相悖?
EN

Stack Overflow用户
提问于 2015-05-15 04:59:12
回答 2查看 139关注 0票数 0

这些是UIToolBar图标和条形按钮图标的人机界面指南。

我想要一些不完全跟随HIG的东西。

基本上,我想要一个坚实的圆形和平坦的彩色UIButton,与文字顶部。(然而,出于明显的原因,我不希望文本与图像分开)。

这能做到吗?

你能用UIBarButtonItem = 5.0画一个.cornerradius吗?我相信那只是UIButton

或者,您可以使用蒙面png图像作为您的UIBarButtonItem,应用一种淡色来更改图像掩码,并在顶部添加一些覆盖文本?

或者您需要伪造/模拟创建一个UIToolbar,只需在您的View底部创建一个44像素的lightGreyUIView

如何才能做到这一点,是否会因为违反HIG而被拒绝?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-15 06:21:44

您可以始终使用UIToolBar &将UIBarButtonItem添加到其中。由于UIBarButtonItem是从UIBarItem继承而来的&然后继承到NSObject,所以您需要修改的功能很少。

使用下面的代码在UIToolBar中启动您的项目,这样您就可以将自定义UIButton作为UIToolBarItem

若要将按钮背景色更改为不同的状态,您可能必须将按钮状态保存在数组中,并根据状态更改颜色。

以下是这方面的新代码:

代码语言:javascript
复制
UIToolbar *toolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0,55, self.view.bounds.size.width, 55)];
toolbar.tintColor = [UIColor redColor];
[self.view addSubview:toolbar];

NSMutableArray *tempArray = [[NSMutableArray alloc]init];
buttonStateArray = [[NSMutableArray alloc]init];
for(int i =0; i < 3; i++){
    UIButton *tempButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 30)];
    tempButton.backgroundColor = [UIColor redColor];
    tempButton.layer.cornerRadius = 8;
    tempButton.layer.borderWidth = 2;
    tempButton.tag = i;
    tempButton.layer.borderColor = [UIColor blackColor].CGColor;
    [tempButton setTitle:[NSString stringWithFormat:@"Hello %d", i] forState:UIControlStateNormal];
    [tempButton addTarget:self action:@selector(displayTapped:) forControlEvents:UIControlEventTouchUpInside];
    [tempArray addObject:[[UIBarButtonItem alloc]initWithCustomView:tempButton]];

    [buttonStateArray addObject:[NSNumber numberWithBool:NO]];
}

[toolbar setItems:tempArray];

现在是按钮的目标方法

代码语言:javascript
复制
-(void)displayTapped:(UIButton *)sender{
BOOL state = [[buttonStateArray objectAtIndex:sender.tag] boolValue];
[buttonStateArray replaceObjectAtIndex:sender.tag withObject:[NSNumber numberWithBool:!state]];
if(!state){
    sender.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
}else {
    sender.backgroundColor = [UIColor redColor];
}

}

更新屏幕在这里

票数 1
EN

Stack Overflow用户

发布于 2015-05-15 05:01:24

您可以使用bar按钮的initWithCustomView:初始化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30251793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档