Как отобразить большое количество меток в настраиваемом пользовательском интерфейсе таблицы быстрого просмотра ячейки? - PullRequest
0 голосов
/ 20 мая 2019

Я отображаю данные, как показано на этом изображении Я хочу отобразить оценки или оценки, которые я использую в качестве меток.Около 100 этикеток.

Я беру детали каждого учащегося как 1 отдельный массив, например:

student1 = [
    [test details, test1, test2, test3, test4],
    [subject1,100,98,56,78],
    [subject2,67,78,89,56],
    [subject3,67,56,34,78],
    [subject4,56,46,84,38]]
student2 = [[test details, test1, test2, test3, test4],[subject1,100,98,56,78],[subject2,67,78,89,56],[subject3,67,56,34,78],[subject4,56,46,84,38]]

и т. Д. *

эти данныеЯ хочу отобразить в пользовательской ячейке UITableViewCell.

Я написал класс StudentCustomCell, который расширяет UITableViewCell

, используя для создания циклов

  1. , создаваяпредставление прокрутки
  2. создание фонового представления баллов
  3. и создание меток меток в соответствии с моим требованием

при выполнении кода те же метки / метки только у студента 1 былиотображается во всех ячейках.

Поскольку я использую только счет 1 ученика в цикле.

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

        let cell = tableView.dequeueReusableCell(withIdentifier: "SCell", for: indexPath) as! StudentCustomCell

        cell.cricketerName.text = studentDetails[indexPath.row][0]
        cell.studentImage.image = UIImage(named: studentDetails[indexPath.row][0])

    }

    return cricketerCell

}
func scoreScrollView(){

    scView = UIScrollView(frame: CGRect(x: 0, y: 120, width: cricketView.frame.width, height: 220))

    scView.backgroundColor = .white
    self.addSubview(scView)

    var formatView:UIView!

for i in 0..<(student1[0] as AnyObject).count! {

     formatView = UIView()
     xAxis = 10
     formatView.frame = CGRect(x: 0, y: CGFloat(yAxis), width: 640, height: 40)

     if(i % 2 == 0){
     formatView.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.2132919521)
     }else{
     formatView.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.4010595034)
     }

     for j in 0..<student1.count {

     let label = UILabel()
     label.text = "\(student1[j][i])"
     label.frame = CGRect(x: xAxis, y: CGFloat(yAxis)+5, width: 60, height: 30)
     xAxis = xAxis + 65
     scView.addSubview(label)
     }
     yAxis = yAxis + 40
     scView.addSubview(formatView)
     scrolls.append(scView)
     }

     scView.contentSize = CGSize(width: xAxis, height: scView.frame.height)

}

test details     subject1    subject2    subject3   subject4                 

test1              100          67           67         56               

test2               98          78           56         46        

test3               56          89           34         84                 

test4               78          56           78         38                 

Отображаю результат, как указано выше, в ячейке/ строка представления таблицы.

1 Ответ

1 голос
/ 20 мая 2019

Для такого рода сложных требований к макету вы должны рассмотреть сериализацию логики макета. Популярный способ сделать это - использовать XIB / Раскадровки для компоновки вашей производной ячейки UITableViewCell.

Однако задача состоит в том, чтобы расположить элементы с учетом изменения размеров устройства. Следовательно, вы должны использовать функцию автоматической разметки iOS - просто сделайте это один раз, и вам будет гораздо проще содержать дополнительные изменения позже.

Напротив - Представьте себе ужас написания логики компоновки фреймов в коде. Через 2 недели вы не сможете понять, почему вы написали этот код. Действительные случаи для написания этой логики в вашем коде существуют (причины производительности загрузки xib / раскадровки), но ни один из них здесь не применим.

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

...