iOS学习笔记1—UITableViewCell设置
2013-01-15 11:01
453 查看
原文来自老汪博客:一个流浪在帝都的码农。
今天遇到一种情况,当点击UITableViewCell高亮时,其子视图中有高亮的对象也高亮了,折腾了很久都没有搞定,跟同事们一起研究也没有找到方法,后来在网上找到了解决的方法,现在分享一下!
为了进行UI自定义,修改了UITableViewCell的accessoryView,如下
UIButton * accessoryDetailDisclosureButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[accessoryDetailDisclosureButton setImage:[UIImage imageNamed:@"accessoryDetailDisclosureButton_normal.png"] forState:UIControlStateNormal];
[accessoryDetailDisclosureButton setImage:[UIImage imageNamed:@"accessoryDetailDisclosureButton_highlighted.png"] forState:UIControlStateHighlighted];
[accessoryDetailDisclosureButton addTarget:self action:@selector(accessoryDetailDisclosureButtonPress:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryView = accessoryDetailDisclosureButton;
[accessoryDetailDisclosureButton release];
实现如下的效果
可是在cell被选中的时候,却连带把accessoryView的状态也修改成了highlighted,如下
最后的解决办法就是继承UITableViewCell来进行cell按下动作时的状态修改,如下
@interfaceUCaiTableViewCell : UITableViewCell
@end
@implementationUCaiTableViewCell
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[super touchesBegan:touches withEvent:event];
[(UIButton *)self.accessoryView setHighlighted:NO];
}
@end
从而实现了如下效果
以上的修改办法,虽然可以让cell在按下的时候,accessoryView的highlighted修改为NO,但是在手指向上离开cell时,accessoryView的highlighted任然被修改成了YES;
所以要想实现cell被按下和松开时都不会影响其上子视图的highlighted的话,需要了解TableView与TableViewCell在按下时的协作关系。
当手指在cell上按下,cell被选中的这一动作中,系统调用了如下一序列方法
-------------------------------------------------------------------------------------------------------------------
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated UITableViewCell (手指按下cell时) highlighted:YES
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated UITableViewCell (手机离开cell时) highlighted:NO
tableView:willSelectRowAtIndexPath: UITableView (手机离开cell,并选中cell时)
- (void)setSelected:(BOOL)selected animated:(BOOL)animated UITableViewCell (手机离开cell,并选中cell时) selected:YES
tableView:didSelectRowAtIndexPath: UITableView (手机离开cell,并选中cell时)
-------------------------------------------------------------------------------------------------------------------
其实cell上的子视图在cell被高亮的同时也会被高亮,是因为UITableViewCell的selectedBackgroundView影响。当UITableViewCell为选中状态时,UITableViewCell把selectedBackgroundView当作一个子视图来添加,selectedBackgroundView被添加在UITableViewCell的backgroundView之上,或者所有其它视图之下。当调用setSelected: animated:这一方法时,会导致selectedBackgroundView以一个alpha消化的状态来出现和消失。
因此我们可知道,如果UITableViewCell的selectionStyle值为UITableViewCellSelectionStyleNone时,selectedBackgroundView将不起作用。
我们进行以下的子类化,就可解决以上我们遇到的问题
@interfaceUCaiTableViewCell : UITableViewCell
@end
@implementationUCaiTableViewCell
@synthesizepiosaDelegate = _piosaDelegate;
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{
[super setHighlighted:highlighted animated:animated];
if(highlighted) {
[(UIButton *)self.accessoryView setHighlighted:NO];
}
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated{
[super setSelected:selected animated:animated];
if(selected) {
[(UIButton *)self.accessoryView setHighlighted:NO];
}
}
至此,在cell高亮的情况下,其accessoryView都不会受其影响,变为高亮状态了,同样的道理都适用于cell里的任一子视图
今天遇到一种情况,当点击UITableViewCell高亮时,其子视图中有高亮的对象也高亮了,折腾了很久都没有搞定,跟同事们一起研究也没有找到方法,后来在网上找到了解决的方法,现在分享一下!
为了进行UI自定义,修改了UITableViewCell的accessoryView,如下
UIButton * accessoryDetailDisclosureButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[accessoryDetailDisclosureButton setImage:[UIImage imageNamed:@"accessoryDetailDisclosureButton_normal.png"] forState:UIControlStateNormal];
[accessoryDetailDisclosureButton setImage:[UIImage imageNamed:@"accessoryDetailDisclosureButton_highlighted.png"] forState:UIControlStateHighlighted];
[accessoryDetailDisclosureButton addTarget:self action:@selector(accessoryDetailDisclosureButtonPress:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryView = accessoryDetailDisclosureButton;
[accessoryDetailDisclosureButton release];
实现如下的效果
可是在cell被选中的时候,却连带把accessoryView的状态也修改成了highlighted,如下
最后的解决办法就是继承UITableViewCell来进行cell按下动作时的状态修改,如下
@interfaceUCaiTableViewCell : UITableViewCell
@end
@implementationUCaiTableViewCell
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[super touchesBegan:touches withEvent:event];
[(UIButton *)self.accessoryView setHighlighted:NO];
}
@end
从而实现了如下效果
以上的修改办法,虽然可以让cell在按下的时候,accessoryView的highlighted修改为NO,但是在手指向上离开cell时,accessoryView的highlighted任然被修改成了YES;
所以要想实现cell被按下和松开时都不会影响其上子视图的highlighted的话,需要了解TableView与TableViewCell在按下时的协作关系。
当手指在cell上按下,cell被选中的这一动作中,系统调用了如下一序列方法
-------------------------------------------------------------------------------------------------------------------
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated UITableViewCell (手指按下cell时) highlighted:YES
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated UITableViewCell (手机离开cell时) highlighted:NO
tableView:willSelectRowAtIndexPath: UITableView (手机离开cell,并选中cell时)
- (void)setSelected:(BOOL)selected animated:(BOOL)animated UITableViewCell (手机离开cell,并选中cell时) selected:YES
tableView:didSelectRowAtIndexPath: UITableView (手机离开cell,并选中cell时)
-------------------------------------------------------------------------------------------------------------------
其实cell上的子视图在cell被高亮的同时也会被高亮,是因为UITableViewCell的selectedBackgroundView影响。当UITableViewCell为选中状态时,UITableViewCell把selectedBackgroundView当作一个子视图来添加,selectedBackgroundView被添加在UITableViewCell的backgroundView之上,或者所有其它视图之下。当调用setSelected: animated:这一方法时,会导致selectedBackgroundView以一个alpha消化的状态来出现和消失。
因此我们可知道,如果UITableViewCell的selectionStyle值为UITableViewCellSelectionStyleNone时,selectedBackgroundView将不起作用。
我们进行以下的子类化,就可解决以上我们遇到的问题
@interfaceUCaiTableViewCell : UITableViewCell
@end
@implementationUCaiTableViewCell
@synthesizepiosaDelegate = _piosaDelegate;
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{
[super setHighlighted:highlighted animated:animated];
if(highlighted) {
[(UIButton *)self.accessoryView setHighlighted:NO];
}
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated{
[super setSelected:selected animated:animated];
if(selected) {
[(UIButton *)self.accessoryView setHighlighted:NO];
}
}
至此,在cell高亮的情况下,其accessoryView都不会受其影响,变为高亮状态了,同样的道理都适用于cell里的任一子视图
相关文章推荐
- iOS学习笔记-098.彩票13——设置2_UITableViewCell创建
- iOS学习笔记-099.彩票14——设置3_UITableViewController基类提取
- ios学习笔记:tableviewcell中ui设置frame问题
- ios学习笔记UITableViewCell重用时出现重影的解决方案
- ios学习笔记: TableView利用label调整cell高度
- ios中UITableViewCell选中后的颜色设置
- UITableView-FDTemplateLayoutCell 学习笔记
- IOS学习笔记(5)——启动logo画面的设置
- ioS学习 UITableViewCell 增加、删除、移动
- iOS学习笔记10—UILabel设置自动使用高和换行
- iOS学习笔记-100.彩票15——设置4_设置和推送提醒控制器创建
- iOS开发学习笔记——UITableview
- iOS 绘制 cell --- 新手学习笔记
- #iOS开发笔记#iOS6及以下中,cell.backgroundColor设置失败的原因
- IOS UITableViewCell的选中时的颜色设置
- 【IOS学习笔记】为UICollectionView设置自适应屏幕宽度以及点击效果
- iOS学习笔记之TableViewCell右侧滑动多项操作
- 【学习笔记】tableview 文字设置 缩进,头尾标题 间距,cell高度 点击 分割线
- iOS学习笔记--如何为UITextView设置placeholder
- iOS学习笔记之UI-UISearchController-And-UITableView