【问题标题】:Subview in cell loses color when tableview is changing当表格视图更改时,单元格中的子视图会失去颜色
【发布时间】:2014-11-01 13:45:30
【问题描述】:

我有一个具有动态子视图的 UITableView。

当表格是静态的时,它看起来像这样: 带有 T 的圆形视图是自定义子视图

但是当我选择编辑并拖动表格单元格时,它会失去颜色和 T。

这是什么原因?

我这样初始化单元格(这是一个原型 IB 单元格):

    func configureCell(cell: UITableViewCell, atIndexPath indexPath: NSIndexPath) {
        let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as Item
        //cell.textLabel.text = object.valueForKey("name")!.description
        let cSubView = cell.viewWithTag(100) as RoundedIcon
        cSubView.setUpViewWithFirstLetter(String(first(object.name)!).uppercaseString)
    }

RoundedIcon 的工作方式如下:

override init(frame: CGRect) {
    super.init(frame: frame)
    self.layer.cornerRadius = self.frame.size.width / 2;
    self.layer.borderWidth = 1.0;
    self.layer.borderColor = UIColor.lightGrayColor().CGColor;
    self.clipsToBounds = true;
}

func setUpViewWithFirstLetter(letter:String){
        self.backgroundColor = RoundedIcon.UIColorFromRGB(0x68C3A3)
        let theLetterLabel = UILabel()
        theLetterLabel.text = letter
        theLetterLabel.textColor = UIColor.whiteColor()
        theLetterLabel.textAlignment = .Center
        theLetterLabel.font = UIFont.systemFontOfSize(25)
        self.addSubview(theLetterLabel)
        theLetterLabel.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: self.frame.size)
    }

【问题讨论】:

  • 你能从视图导航器中显示 tableView 的视图层次结构吗?
  • 我认为这只是单元格在拖动过程中的正常行为。你实际上并没有失去“T”,你只是看不到它,因为它是白色的。如果您将其设为任何其他颜色,您将在拖动过程中看到它。具有背景颜色的普通标签(未经任何修改的标签)在拖动过程中也会失去颜色。
  • @rdelmar 你是对的。标签保持在原位。那么它失去背景颜色的原因是什么?
  • 我不确定。这可能与选择时发生的情况相同,所有背景颜色都设置为清除。
  • @rdelmar 感谢您的帮助。由于您的评论,我找到了解决方法!

标签: ios iphone uitableview swift custom-cell


【解决方案1】:

@rdelmar 的评论为我指明了正确的方向,即 UITableview 将其所有单元格的背景颜色更改为:

UIColor(white:0,alpha:0)

如果您不希望视图更改其颜色,则应更改 backgroundColor 属性设置器,该设置器在 swift 中的工作方式如下:

//override this setter to avoid color resetting on drag
override var backgroundColor:UIColor?{
    didSet {
        //check the color after setting - you also can do it earlier
        if let bgCol = backgroundColor{
            println(bgCol)
            if bgCol == UIColor(white: 0, alpha: 0){ //check if it's settled by the table
                super.backgroundColor = yourColor //set it back to your color
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多