将自定义图像 UIButtons 添加到自定义 UIToolbar 无法正常工作
Posted
技术标签:
【中文标题】将自定义图像 UIButtons 添加到自定义 UIToolbar 无法正常工作【英文标题】:Add custom image UIButtons to a custom UIToolbar does not work right 【发布时间】:2013-11-21 16:49:42 【问题描述】:我已经用 4 个UIbutton
实现了一个自定义UIToolBar
。这些按钮是带有图像的按钮。我用这段代码创建了它们:
-(NSArray *)setButtonForToolBar
CGRect buttonFrame =
.origin.x = 0,
.origin.y = 0,
.size.width = self.frame.size.width/4,
.size.height = self.frame.size.height,
;
NSLog(@"Frame width: %f and Origin x: %f ", buttonFrame.size.width, buttonFrame.origin.x );
// BOTON CHECK IN
UIButton *checkinButton = [[UIButton alloc]initWithFrame:buttonFrame] ;
[checkinButton addTarget:self action:@selector(checkInService:) forControlEvents:UIControlEventTouchUpInside];
[checkinButton setImage:[UIImage imageNamed:@"btn-checkin.png"] forState:UIControlStateNormal];
[checkinButton setImage:[UIImage imageNamed:@"btn-checkin-selected.png"] forState:UIControlStateHighlighted | UIControlStateSelected];
checkinButton.tag = 0;
UIBarButtonItem *checkInBarBtn = [[UIBarButtonItem alloc] initWithCustomView: checkinButton];
// BOTON PARA LA INFO
buttonFrame.origin.x = CGRectGetMaxX(buttonFrame);
NSLog(@"Frame width: %f and Origin x: %f ", buttonFrame.size.width, buttonFrame.origin.x );
UIButton *infoBtn = [[UIButton alloc]initWithFrame:buttonFrame];
[infoBtn addTarget:self action:@selector(checkInService:) forControlEvents:UIControlEventTouchUpInside];
[infoBtn setImage:[UIImage imageNamed:@"btn-info.png"] forState:UIControlStateNormal];
[infoBtn setImage:[UIImage imageNamed:@"btn-info-selected.png"] forState:UIControlStateHighlighted | UIControlStateSelected];
infoBtn.tag = 1;
UIBarButtonItem *infoBarBtn = [[UIBarButtonItem alloc] initWithCustomView: infoBtn];
// BOTON PARA VALORACIONES
buttonFrame.origin.x = CGRectGetMaxX(buttonFrame);
NSLog(@"Frame width: %f and Origin x: %f ", buttonFrame.size.width, buttonFrame.origin.x );
UIButton *voteBtn = [[UIButton alloc]initWithFrame:buttonFrame];
[voteBtn addTarget:self action:@selector(checkInService:) forControlEvents:UIControlEventTouchUpInside];
[voteBtn setImage:[UIImage imageNamed:@"btn-comment.png"] forState:UIControlStateNormal];
[voteBtn setImage:[UIImage imageNamed:@"btn-comment-selected.png"] forState:UIControlStateHighlighted];
voteBtn.tag = 2;
UIBarButtonItem *voteBarBtn = [[UIBarButtonItem alloc] initWithCustomView: voteBtn];
// BOTON PARA PLANES
buttonFrame.origin.x = CGRectGetMaxX(buttonFrame);
NSLog(@"Frame width: %f and Origin x: %f ", buttonFrame.size.width, buttonFrame.origin.x );
UIButton *planBtn = [[UIButton alloc]initWithFrame:buttonFrame];
[planBtn addTarget:self action:@selector(checkInService:) forControlEvents:UIControlEventTouchUpInside];
[planBtn setImage:[UIImage imageNamed:@"btn-fav.png"] forState:UIControlStateNormal];
[planBtn setImage:[UIImage imageNamed:@"btn-fav-selected.png"] forState:UIControlStateHighlighted | UIControlStateSelected];
planBtn.tag = 3;
UIBarButtonItem *planBarBtn = [[UIBarButtonItem alloc] initWithCustomView: planBtn];
NSArray *buttonItems = [NSArray arrayWithObjects:checkInBarBtn, infoBarBtn, voteBarBtn, planBarBtn, nil];
return buttonItems;
ToolBar
使用 = (10,400,300,60) 的框架创建。
查看NSlog
输出:
2013-11-21 17:43:18.557 Woowplanet[3316:70b] Frame width: 75.000000 and Origin x: 0.000000
2013-11-21 17:43:18.569 Woowplanet[3316:70b] Frame width: 75.000000 and Origin x: 75.000000
2013-11-21 17:43:18.570 Woowplanet[3316:70b] Frame width: 75.000000 and Origin x: 150.000000
2013-11-21 17:43:18.571 Woowplanet[3316:70b] Frame width: 75.000000 and Origin x: 225.000000
输出显示它们应该在正确的位置,我不知道为什么它们在其右侧几乎 10 ponts..
问题是按钮位置不正确。看图
谢谢。
【问题讨论】:
【参考方案1】:试试这个:
创建具有灵活空间的条形按钮
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
然后这样做:
NSArray *buttonItems = [NSArray arrayWithObjects:flexibleSpace,checkInBarBtn,flexibleSpace, infoBarBtn,flexibleSpace, voteBarBtn,flexibleSpace, planBarBtn,flexibleSpace, nil];
【讨论】:
以上是关于将自定义图像 UIButtons 添加到自定义 UIToolbar 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
Android Gradle 插件将自定义 Gradle 插件上传到自建 Maven 仓库 ① ( Maven 仓库上传源码上传源码设置 | 自定义源码打包任务 | 自定义文档打包任务 )
Android Gradle 插件将自定义 Gradle 插件上传到自建 Maven 仓库 ⑤ ( 使用 Sonatype Nexus 搭建 Maven 仓库 )
Android Gradle 插件将自定义 Gradle 插件上传到自建 Maven 仓库 ② ( java 和 groovy 插件自带文档任务 | 自定义文档打包任务 | 生成文档包 )
Android Gradle 插件将自定义 Gradle 插件上传到自建 Maven 仓库 ④ ( 默认生成的 pom 文件 | Maven 中的 pom 配置 | 自定义 pom 文件节点 )