Я не могу добавить подпредставление в UItableviewcell - PullRequest
0 голосов
/ 25 февраля 2019

Код

 import UIKit

 class ViewController: 
 UIViewController,UITableViewDelegate,UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 3
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var suma=UITableViewCell()
    var sampleviewpurple=UIView(frame: CGRect(x: suma.frame.width/0, y: 0, width: suma.frame.width/2, height: suma.frame.height))
    sampleviewpurple.backgroundColor=#colorLiteral(red: 0.2196078449, green: 0.007843137719, blue: 0.8549019694, alpha: 1)

    var sampleviewred=UIView(frame: CGRect(x: suma.frame.width/1, y: 0, width: suma.frame.width/2, height: suma.frame.height))
    sampleviewred.backgroundColor=#colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1)



    suma.contentView.addSubview(sampleviewpurple)
    suma.contentView.addSubview(sampleviewred)

    return suma

}




@IBOutlet weak var tab: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()
    tab.dataSource=self
    tab.delegate=self

}

  }

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

Ответы [ 4 ]

0 голосов
/ 25 февраля 2019

Я сделал три изменения.

  1. Снимите ячейку с очереди для повторного использования.

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var suma = UITableViewCell()
    suma = tab.dequeueReusableCell(withIdentifier: "DefaultCell")!`
    
  2. Изменены sampleviewpurple и sampleviewredx position

    let sampleviewpurple = UIView(frame: CGRect(x: 0, y: 0, width: suma.frame.width/2, height: suma.frame.height))
    
    let sampleviewred = UIView(frame: CGRect(x: suma.frame.width/2, y: 0, width: suma.frame.width/2, height: suma.frame.height))
    
  3. Зарегистрированная ячейка, которая создается программно для создания соединения между UITableView и UITableViewCell в viewDidLoad функции

    tab.register(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")
    
0 голосов
/ 25 февраля 2019

Вы создаете ячейку в коде.Прежде всего, вам нужно зарегистрировать метод UITableViewCell в viewDidLoad.

tab.register(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")

Затем вы должны использовать ячейку dequeue в методе cellForRowAt. * ​​1006 *

var suma = tab.dequeueReusableCell(withIdentifier: "DefaultCell")

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

0 голосов
/ 25 февраля 2019

Для настройки рамки вашего вида вы используете рамку ячейки, которая еще не установлена.Вам следует использовать такое представление, какой фрейм уже установлен и на каких основаниях вы хотите рассчитать фрейм ваших новых видов.

Попробуйте:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var sumaCell:UITableViewCell?
           sumaCell = tableView.dequeueReusableCell(withIdentifier: "sumaCell")
    if  sumaCell == nil {
        sumaCell = UITableViewCell(style: .default, reuseIdentifier: "sumaCell")
    }




    var sampleviewpurple=UIView(frame: CGRect(x: 0, y: 0, width: ((sumaCell?.frame.width)!/2), height: (sumaCell?.frame.height)!))
    sampleviewpurple.backgroundColor=#colorLiteral(red: 0.2196078449, green: 0.007843137719, blue: 0.8549019694, alpha: 1)

    var sampleviewred=UIView(frame: CGRect(x: (sumaCell?.frame.width)!/2, y: 0, width: ((sumaCell?.frame.width)!/2), height: (sumaCell?.frame.height)!))
    sampleviewred.backgroundColor=#colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1)

    sumaCell?.contentView.addSubview(sampleviewpurple)
    sumaCell?.contentView.addSubview(sampleviewred)

    return sumaCell!

}
0 голосов
/ 25 февраля 2019

В функции cellForRowAt вы должны удалить из очереди ячейку таблицы, а не создавать экземпляр UITableViewCell:

var suma = tableView.dequeueReusableCell(withIdentifier: "YOUR_CELL_IDENTIFIER")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...