目前我正在使用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”
答案 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)
答案 3 :(得分:3)
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()