在UITableViewCell的左侧添加垂直条

时间:2015-08-31 12:11:19

标签: ios objective-c swift uitableview

是否可以在UITableViewCell的左侧添加一个栏?

我想在选定的单元格上添加左栏。

请查看下面的图片

enter image description here

3 个答案:

答案 0 :(得分:3)

创建自定义TableViewCell

enter image description here

创建显示的约束

enter image description here

enter image description here

约束视图

enter image description here

将属性设置为左侧的视图

enter image description here

如果您遇到任何约束错误,您可以通过向leftView添加约束来解决此问题,如下所示

enter image description here

为内容视图

创建约束标签的出口

enter image description here

这是主要部分首先只是为了纠正标签位置

<强>目标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设置为选择中的垂直条