Выбор таблицы скрывает мою кнопку в ячейке tableview

Есть еще один вопрос с такой же логикой. Подменю UITableViewCell исчезает, когда выбрана ячейка. Я не получил правильное решение, которое я хочу. Они предлагают подклассифицировать это представление. Но мне нужна кнопка отображения внутри самой ячейки.

Перейдем к моему вопросу:

У меня есть индивидуальное и программно созданное табличное представление.

Пожалуйста, взгляните на скриншоты.

enter image description here

В этом я программно добавила кнопку в ячейку таблицы.

Давайте рассмотрим проблему.

enter image description here

Когда я выбираю любую ячейку, она также скрывает кнопку, я хочу видеть эту кнопку.

Мой код здесь:

     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


    var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell

    // here is the redbutton

           var redBtn = UIButton()
       redBtn = UIButton(frame: CGRectMake(0, 0, 40, 40))
       redBtn.backgroundColor = UIColor.redColor()
        cell.addSubview(redBtn)

    //label text just added from an array

     cell.textLabel?.textAlignment = NSTextAlignment.Center
     cell.textLabel?.text = items[indexPath.row]

     return cell

}

При необходимости: код создания таблицы:

       var tableView: UITableView  =   UITableView()

      override func viewDidLoad() {
       super.viewDidLoad()
    tableView.frame         =   CGRectMake(0, 50, self.view.frame.width,self.view.frame.height);
    tableView.delegate      =   self
    tableView.dataSource  =  self
tableView.estimatedRowHeight = 30
 tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

    self.view.addSubview(tableView)



}

Спасибо заранее.

Ответ 1

Вот решение. Дайте номер тега кнопке.

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell

// here is the redbutton

       var redBtn = UIButton()
   redBtn = UIButton(frame: CGRectMake(0, 0, 40, 40))
   redBtn.backgroundColor = UIColor.redColor()
     cell.contentView.addSubview(redBtn)
   redBtn.tag = 101
//label text just added from an array

 cell.textLabel?.textAlignment = NSTextAlignment.Center
 cell.textLabel?.text = items[indexPath.row]

 return cell
}

Теперь в методе didSelectRowAtIndex добавьте это.

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {

    var selectedCell = tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell!

    for subViews in selectedCell.contentView.subviews {

        if subViews is UIButton && subViews.tag == 101 {
            let button = subViews as! UIButton
            selectedCell.bringSubviewToFront(button)
            button.backgroundColor = UIColor.redColor()
        }
    }
}

Ответ 2

Поскольку UITableView изменяет цвет фона ваших подзонов в ячейке при ее выборе. В вашем случае он меняет цвет кнопки красного цвета на тот же цвет, что и линия выделения (серый).

Вы можете увидеть решение здесь: Подменю UITableViewCell исчезает при выборе ячейки

Ответ 3

При чтении немного больше документации, похоже, UITableViewCell изменяет цвет фона на представлениях, когда он подсвечен или выбран. Попробуйте следующее:

Заменить setSelected(_ selected: Bool, animated animated: Bool) и setHighlighted(_ highlighted: Bool, animated animated: Bool). Повторно установите фоновые цвета кнопок и не забудьте вызвать super.

Ответ 4

Вы можете добавить пользовательскую кнопку:

class NoHighlightButton: UIButton {

    override var backgroundColor: UIColor? {
        get {
            return super.backgroundColor
        }
        set {
            if newValue != UIColor.clearColor() {
                super.backgroundColor = newValue
            }
        }
    }
}

Ответ 5

Вы не должны использовать cell.addSubview(aSubview). Вместо этого вы должны использовать cell.contentView.addSubview(aSubview). Не могу сказать, что это 100% ваша проблема, но это может быть.

В документации UITableViewCell:

Если вы хотите настроить ячейки, просто добавив дополнительные виды, вы должны добавить их в представление содержимого, чтобы они были соответствующим образом расположены, когда ячейка переходит в режим редактирования и выходит из него.

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewCell_Class/#//apple_ref/occ/instp/UITableViewCell/contentView