答案 0 :(得分:3)
创建自定义TableViewCell
创建显示的约束
约束视图
将属性设置为左侧的视图
如果您遇到任何约束错误,您可以通过向leftView添加约束来解决此问题,如下所示
为内容视图
创建约束标签的出口这是主要部分首先只是为了纠正标签位置
<强>目标C 强>
在MyTableViewCell.h
(自定义单元格)中创建出口
@property (weak, nonatomic) IBOutlet UIView *viewOnLeft;
@property (weak, nonatomic) IBOutlet UILabel *label;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *leftConstraint;////Only if you need to move the label on showing left frame
ViewController.m(它包含tableView)
@property(nonatomic,strong) NSMutableArray* selectedIndexPaths;//Declare Globaly
viewDidLoad()
中的
[self.tableView registerNib:[UINib nibWithNibName:@"MyTableViewCell" bundle:nil] forCellReuseIdentifier:@"MyCell"];
[self.tableView allowsMultipleSelection];
self.selectedIndexPaths = [[NSMutableArray alloc] init];
cellForRowAtIndexPath
方法中的
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.label.text = [NSString stringWithFormat:@"Section %ld Row %ld",(long)indexPath.section,(long)indexPath.row];
if ([self.selectedIndexPaths containsObject:indexPath])
{
[cell.viewOnLeft setHidden:NO];
cell.leftConstraint.constant = 18; //Only if you need to move the label on showing left frame
}
else
{
[cell.viewOnLeft setHidden:YES];
cell.leftConstraint.constant = 3; //Only if you need to move the label on hiding left frame
}
return cell;
didSelectRowAtIndexPath
方法中的
if ([self.selectedIndexPaths containsObject:indexPath]){
[self.selectedIndexPaths removeObject:indexPath];
}else {
[self.selectedIndexPaths addObject:indexPath];
}
[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];
Swift 4
在MyTableViewCell.swift(自定义单元格)中创建出口
@IBOutlet weak var viewOnLeft: UIView!
@IBOutlet weak var label: UILabel!
@IBOutlet weak var leftConstraint: NSLayoutConstraint!
ViewController.swift(它包含tableView)
var selectedIndexPaths:[IndexPath]! // Global declaration
viewDidLoad()
中的
self.tableView.register(UINib(nibName: "MyTableViewCell", bundle: nil), forCellReuseIdentifier: "MyCell")//Since i am using xib for custom cell
self.tableView.allowsMultipleSelection = true
selectedIndexPaths = [IndexPath]()
cellForRowAt indexPath
方法中的
let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! MyTableViewCell
cell.selectionStyle = .none
cell.label.text = "Section \(indexPath.section) Row \(indexPath.row)"
if selectedIndexPaths.contains(indexPath) {
cell.viewOnLeft.isHidden = false
cell.leftConstraint.constant = 18
} else {
cell.viewOnLeft.isHidden = true
cell.leftConstraint.constant = 3
}
cell.layoutIfNeeded()
cell.contentView.layoutSubviews()
return cell
在didSelectRowAt indexPath
方法
if selectedIndexPaths.contains(indexPath) {
guard let index = selectedIndexPaths.index(of: indexPath) else {
return
}
selectedIndexPaths.remove(at: index)
} else {
selectedIndexPaths.append(indexPath)
}
tableView.beginUpdates()
tableView.reloadRows(at: [indexPath], with: .automatic)
tableView.endUpdates()
答案 1 :(得分:1)
我已在UIView
上添加了UITableViewCell
。我用它在行的左侧显示一个彩色条。
我只是将UIView
放在IB中的UITableViewCell
上,这比UITableViewCell
略短。现在我只需要更改cell.backgroundcolor
的值,以在左侧显示不同的彩色条。
请勿忘记将新UIView
的颜色更改为UITableViewCell
的原始颜色
//截图即将推出
答案 2 :(得分:0)
self.tableView.allowsMultipleSelection = YES;
UITableView的属性。
将Show Show UIView设置为选择中的垂直条