删除UITableViewCell选择

时间:2013-07-28 03:07:02

标签: ios objective-c uitableview

目前我正在使用UITableViewSelectionStyleNone覆盖标准的UITableViewSelectionStyle,然后根据委托方法更改单元格的颜色:

- (void)tableView:(UITableView *)tableView 
      didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];                
    [cell setBackgroundColor:[UIColor yellowColor]];
}

- (void)tableView:(UITableView *)tableView 
    didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setBackgroundColor:[UIColor whiteColor]];
}

- (void)tableView:(UITableView *)tableView 
    didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"indexpath: %i",indexPath.row);
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setBackgroundColor:[UIColor whiteColor]];
}

- (void)tableView:(UITableView *)tableView 
    didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setBackgroundColor:[UIColor whiteColor]];
}

除了每当我突出显示一个单元格,然后将其手指从它上面拖出而没有实际选择它时,这几乎可以正常工作,颜色不会变为白色...如果我将其设置为[UIColor RedColor],它的工作性能很好。这是为什么......

修改

不知何故,当我在didUnhlightRowAtIndexPath之后打印出indexPath.row时,我从我的NSLog获取“indexpath:2147483647”

8 个答案:

答案 0 :(得分:32)

你可以尝试:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

如果您只是希望在选择单元格后突出显示消失。除非我误解你的问题。

答案 1 :(得分:17)

你也可以尝试这个

tableView.allowsSelection = NO;

另一种方法

cell.selectionStyle = UITableViewCellSelectionStyleNone;
再来一次

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}

答案 2 :(得分:4)

您也可以从故事板中进行操作。选择tableViewCell,在Attributes Inspector下,您可以选择Selection>无

enter image description here

答案 3 :(得分:3)

这是Swift 2 version

    if let indexPaths = self.tableView.indexPathsForSelectedRows {
        for indexPath in indexPaths {
            self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
        }
    }

答案 4 :(得分:2)

通过维护indexPath的本地实例,我能够找到最后选择的单元格并将其颜色更改为whitecolor。看起来真的很烦人,我必须自己保持状态,但它就是它......

答案 5 :(得分:2)

取消选择所选行。你甚至不需要知道它是哪一个。

public class XmlExport : IXmlExport
{
    private readonly IJobRepository jobRepository;

    public XmlExport()
    {
        jobRepository = new JobRepository();
    }
}

答案 6 :(得分:0)

最适合我的简单解决方案(Swift 4.2)
(如果您仍然希望选择表格视图的行)

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if let index = self.tableView.indexPathForSelectedRow{
        self.tableView.deselectRow(at: index, animated: true)
    }
}

答案 7 :(得分:0)

如何通过扩展程序做到这一点?

import UIKit

extension UITableView {
    func removeRowSelections() {
        self.indexPathsForSelectedRows?.forEach {
            self.deselectRow(at: $0, animated: true)
        }
    }
}

用法:

tableView.removeRowSelections()