cell选中时子视图状态自定义

(转)iOS编程——UITableViewCell高亮时其子视图的状态修改

(2012-06-13 22:38:39)

转载▼

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按下动作时的状态修改,如下

@interface UCaiTableViewCell : UITableViewCell

@end

@implementation UCaiTableViewCell

- (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将不起作用。

我们进行以下的子类化,就可解决以上我们遇到的问题

@interface UCaiTableViewCell : UITableViewCell

@end

@implementation UCaiTableViewCell

@synthesize piosaDelegate = _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里的任一子视图

时间: 2024-10-31 02:53:49

cell选中时子视图状态自定义的相关文章

cell添加选中时的背景图片、显示图片和图片自适应框的大小

1.给cell添加选中时的背景图片 UIView *myview = [[UIView alloc] init]; myview.frame = CGRectMake(0, 0, 320, 47); myview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"0006.png"]]; cell.selectedBackgroundView = myview; 2.显示图片 CGRect my

iOS UITableViewCell点击时子视图背景透明的解决方法

在做iOS项目的开发中,UITableView控件的应用十分广泛.在进行自定义UITableViewCell时,经常遇到这样的问题:在UITableViewCell上面添加了一个有背景颜色的子视图,当用户点击UITableViewCell或者选中UITableViewCell时,Cell上的子视图发生了奇怪的变化,其背景色变透明了,如果添加在Cell上的子视图只是一个色块,那么我们看起来,这个子视图好像莫名其妙的消失了一样.    如果设置  self.selectionStyle = UITa

设置UITableViewCell 选中时的背景颜色

自定义Cell如图 一个View上面放了四个Label 分别连线到.m文件中 @property (weak, nonatomic) IBOutlet UILabel *nameLabel; @property (weak, nonatomic) IBOutlet UILabel *positionLabel; @property (weak, nonatomic) IBOutlet UILabel *paperLabel; @property (weak, nonatomic) IBOutle

UItableViewCell选中时的颜色及tableviewCell的select和deselect

今天做项目美工和我说cell点击后再跳回当前页面cell的默认点击状态应该取消,后来在网上查到,其实比较简单,有两种实现方法,代码如下 方法一: 在页面将要出现的时候对tableview执行deselect操作 - (void)viewWillAppear:(BOOL)animated{ [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; } 看上面的英文也应

UITableViewCell的选中时的颜色及tableViewCell的selecte与deselecte

    1.系统默认的颜色设置 [cpp] viewplaincopy //无色 cell.selectionStyle = UITableViewCellSelectionStyleNone; //蓝色 cell.selectionStyle = UITableViewCellSelectionStyleBlue; //灰色 cell.selectionStyle = UITableViewCellSelectionStyleGray; 2.自定义颜色和背景设置 改变UITableViewCe

改变listview中item选中时文字的颜色

当listview的某个item选中时,默认有个选中的高亮显示,如果你要自定义选中时的高亮显示效果,可以在listview中设置属性 1 android:listSelector="@drawable/item_selector" 其中item_selector是在drawable目录下定义的一个xml文件,这种用于突出不同状态下显示效果的xml文件我们称之为selector: 1 2 3 4 5 6 7 <?xml version="1.0" encodin

iOS开发UITableViewCell的选中时的颜色设置

1.系统默认的颜色设置 //无色 cell.selectionStyle = UITableViewCellSelectionStyleNone; //蓝色 cell.selectionStyle = UITableViewCellSelectionStyleBlue; //灰色 cell.selectionStyle = UITableViewCellSelectionStyleGray; 2.自定义颜色和背景设置 改变UITableViewCell选中时背景色: UIColor *color

UITableViewCell的选中时的颜色设置

[cpp] view plaincopy 1.系统默认的颜色设置 [cpp] view plaincopy //无色 cell.selectionStyle = UITableViewCellSelectionStyleNone; //蓝色 cell.selectionStyle = UITableViewCellSelectionStyleBlue; //灰色 cell.selectionStyle = UITableViewCellSelectionStyleGray; 2.自定义颜色和背景

UITableViewCell选中后子View背景色被Clear

在TableView中,当cell 处于Hightlighted(高亮)或者Selected(选中)状态下,Cell上的子控件的背景颜色会被 Clear. 解决方法:(4种) 1. 直接设置子控件的 layer的背景颜色, layer不会受影响 2.重写方法,执行 -(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{ [super setHighlighted:highlighted animated:animated]