为了美化UI,想实现以下图的效果:点击高亮面试
出发点是好的。没想到,出现了下图的连带问题:选择一行的时候,居然连带的出现了高亮效果网络
这个如何是好?通过网络搜索,发现我不是第一个遇到这样的问题:custom-accessory-button-highlight-triggered-by-didselectrowatindexpathide
- UIButton *accessoryButton = [UIButton buttonWithType:UIButtonTypeCustom];
- accessoryButton.frame = CGRectMake(0, 0, 32, 32);
- [accessoryButton setImage:[UIImage p_w_picpathNamed:@"AccessoryButtonNormal.png"] forState:UIControlStateNormal];
- [accessoryButton setImage:[UIImage p_w_picpathNamed:@"AccessoryButtonInverse.png"] forState:UIControlStateHighlighted];
- [accessoryButton addTarget:self action:@selector(doAction:) forControlEvents:UIControlEventTouchUpInside];
- cell.accessoryView = accessoryButton;
连使用方法都是同样的,看来我不是第一个这么干的。这哥哥也不给解决办法,不知道最后搞定没问题。困惑了一天之后,终于让我找到了一条小缝隙,实现了下图的效果:spa
这个点击行的时候,整行高亮是系统自带的功能,没办法改变,怎么办呢?釜底抽薪,在它高亮完之后再把效果取消!这个出发点是对的,但是浪费了大把的时间之后发现仍是达不到预期的效果,怎么呢?查sdk的时候无心间发现UITablview有个willSelectRowAtIndexPath的方法吧。好吧,这个willSelectRowAtIndexPath比didSelectRowAtIndexPath应该靠前吧,在这里面试一下orm
- - (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{
- UITableViewCell *Cell = [tableView cellForRowAtIndexPath:indexPath];
- [(UIButton *)Cell.accessoryView setHighlighted:NO];
- return indexPath;
- }
开始直接用的上面的代码,发现好使靠人品,后来想一想即然在这个地方能够,那就延时执行一下,因而用了:blog
- - (void)mySelectRow:(UIButton *)actionBtn{
- [actionBtn setHighlighted:NO];
- }
- - (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{
- UITableViewCell *Cell = [tableView cellForRowAtIndexPath:indexPath];
- [self performSelector:@selector(mySelectRow:) withObject:(UIButton *)Cell.accessoryView afterDelay:0];
- return indexPath;
- }
因而乎,好使了!get
哎,一个小效果浪费了一天整的时间!string