Кнопка выравнивания по левой стороне ячейки UITableView программно Swift - PullRequest
1 голос
/ 20 января 2020

Я создаю простое приложение, используя Swift 5, Xcode 11 и контроллер табличного представления пользовательского интерфейса. В представлении таблицы пользовательского интерфейса мне нужны 2 кнопки: одна кнопка слева от моего вида таблицы, другая справа. Я пробовал ответы на многие другие похожие / похожие вопросы, но все они не дали результатов (вероятно, потому что 1. Слишком старый, 2. Ответ, написанный на OBJ- C).

Вот мой контроллер табличного представления:


import UIKit

@objcMembers class CustomViewController: UITableViewController {

    var tag = 0

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewDidAppear(_ animated: Bool) {
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    // 3
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        tag = tag + 1

        let cell = tableView.dequeueReusableCell(withIdentifier: "themeCell", for: indexPath) as! ThemeCell
        var cellButton: UIButton!


        cellButton = UIButton(frame: CGRect(x: 5, y: 5, width: 50, height: 30))
        cell.addSubview(cellButton)
        cell.img.image = UIImage(named: SingletonViewController.themes[indexPath.row])
        cell.accessoryView = cellButton
        cellButton.backgroundColor = UIColor.red
        cellButton.tag = tag
        return cell
    }

}

Вот что я сейчас получаю: IMG

Ответы [ 4 ]

6 голосов
/ 20 января 2020

добавить приведенный ниже код для примененного ограничения

let cellButton = UIButton(frame: CGRect.zero)
cellButton.translatesAutoresizingMaskIntoConstraints = false
cell.addSubview(cellButton)
cell.accessoryView = cellButton
cellButton.backgroundColor = UIColor.red

cellButton.leadingAnchor.constraint(equalTo: cell.leadingAnchor, constant: 5).isActive = true
cellButton.topAnchor.constraint(equalTo: cell.topAnchor, constant: 5).isActive = true
cellButton.widthAnchor.constraint(equalToConstant: 50).isActive = true
cellButton.heightAnchor.constraint(equalToConstant: 30).isActive = true
5 голосов
/ 20 января 2020

Вы можете получить правую и левую кнопки выравнивания из Ограничений. Ниже приведен мой код для выравнивания вида вправо или влево

override func viewDidLoad() {

        let leftButton = UIButton(type: .custom)
        leftButton.backgroundColor = UIColor.red
        self.view.addSubview(leftButton)

        leftButton.translatesAutoresizingMaskIntoConstraints = false
        let horizontalConstraint = leftButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20)
        let verticalConstraint = leftButton.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        let widthConstraint = leftButton.widthAnchor.constraint(equalToConstant: 100)
        let heightConstraint = leftButton.heightAnchor.constraint(equalToConstant: 100)
        NSLayoutConstraint.activate([horizontalConstraint, verticalConstraint, widthConstraint, heightConstraint])

        let rightButton = UIButton(type: .custom)
        rightButton.backgroundColor = UIColor.red
        self.view.addSubview(rightButton)

        rightButton.translatesAutoresizingMaskIntoConstraints = false
        let horizontalConstraintRight = rightButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20)
        let verticalConstraintRight = rightButton.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        let widthConstraintRight = rightButton.widthAnchor.constraint(equalToConstant: 100)
        let heightConstraintRight = rightButton.heightAnchor.constraint(equalToConstant: 100)
        NSLayoutConstraint.activate([horizontalConstraintRight, verticalConstraintRight, widthConstraintRight, heightConstraintRight])


    }

Left and Right Aligned View Constraints

2 голосов
/ 20 января 2020

Поскольку ячейка получает повторное использование, вы должны поместить кнопки в свой файл xib. Не стоит каждый раз делать кнопку и добавлять ее в ячейку. Попробуйте это, добавив кнопку в XIB.

1 голос
/ 20 января 2020
class ThemeCell: UITableViewCell { 


  //MARK:- Initialize View

  private let button : UIButton = {

   let button = UIButton()
   button.setTitle("Hello", .normal)
   button.backgroundColor = .red
   button.translatesAutoresizingMaskIntoConstraints = false
   return button

  }()

  //MARK:- View Life Cycle

   required init?(coder aDecoder: NSCoder) {

    super.init(coder: aDecoder)

}

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {

    super.init(style: style, reuseIdentifier: reuseIdentifier)

    setup()

}

override func awakeFromNib() {

    super.awakeFromNib()

}

override func setSelected(_ selected: Bool, animated: Bool) {

    super.setSelected(selected, animated: animated)

    selectionStyle = .none


}

//MARK:- User Defined Function

private func setup() {

   addSubView(button)
   button.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20).isActive = true

   button.topAnchor.constraint(equalTo: topAnchor, constant: 20).isActive = true
   button.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -20).isActive = true


}
}

Вы можете использовать ограничения AutoLayout, как это, чтобы настроить кнопку. Нет необходимости вызывать его в методе cellForRow.

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