Невозможно создать собственный вид - PullRequest
0 голосов
/ 16 июня 2020

Я хотел создать собственный вид. Я разработал свое представление так ... оно называется TagResolutionView.xib

Вот как я разработал свое представление

И файл TagResolutionView.swift для этого выглядит так

import UIKit

@IBDesignable class TagResolutionView: UIView {

    @IBOutlet var tagResolutionView: UIView!

    @IBOutlet var tableview: UITableView!

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        tableview = UITableView()

    }
    override init(frame: CGRect) {
          tableview = UITableView()
        super.init(frame: frame)
      }

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

       @IBOutlet weak var delegate: UITableViewDelegate? {
           get {
               return tableview.delegate
           }
           set {
               tableview.delegate = newValue
           }
       }

       @IBOutlet weak var dataSource: UITableViewDataSource? {
           get {
               return tableview.dataSource
           }
           set {
               tableview.dataSource = newValue
           }
       }

    func registerClass(cellClass: AnyClass?, forCellReuseIdentifier identifier: String) {
        tableview.register(cellClass, forCellReuseIdentifier: "cellClass")
    }

    func dequeueReusableCellWithIdentifier(identifier: String) -> UITableViewCell? {
        return tableview.dequeueReusableCell(withIdentifier: identifier)
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        tableview.frame = self.bounds
        self.addSubview(tableview)
    }

}

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

Это представление

Вот как я настроил в viewcontroller ..

В viewDidLoad ..

    stdProcedViewHeight.constant = 533 //Since the view I took above (as given in the pic) is less than the height of the actual TagResolutionView.xib, I increased its height here programatically.
    standardsProceduresView.delegate = self
    standardsProceduresView.dataSource = self



standardsProceduresView.registerClass(cellClass: UpdatingListTableViewCell.self, forCellReuseIdentifier: "cellClass") //I have also made .xib & .swift files for UpdatingListTableViewCell

Так же добавил эти методы ..

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: UpdatingListTableViewCell = self.standardsProceduresView.dequeueReusableCellWithIdentifier(identifier: "cellClass") as! UpdatingListTableViewCell
  //  cell.nameLbl.text = "MyName"
    return cell

}

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

Но я не могу получить желаемый результат, выполнив все это ... Все, что я получаю, - это просто пустая таблица с установленной высотой (здесь высота 533) и ничего больше о дизайне ...

1 Ответ

1 голос
/ 16 июня 2020

Причина, по которой ваше табличное представление не отображается, заключается в том, что вы сбрасываете все его содержимое, вызывая tableView = UITableView() в своем коде.

Похоже, вы используете раскадровки, поэтому предполагаем вы правильно подключили свой UITableView к выходу свойств @IBOutlet var tableview: UITableView!, ваше табличное представление будет отображаться нормально, и вам не нужно инициализировать его с помощью кода.

Я также вижу, что вы устанавливаете фрейм ваше табличное представление и добавление его в иерархию представлений методом layoutSubviews(). Это определенно не то, что вам нужно / вы хотите сделать, во-первых, потому что вы используете раскадровки, и это означает, что ваше табличное представление уже будет частью иерархии представлений на этом этапе.

Я бы также упомянул, что вы обычно никогда не следует добавлять подпредставление в метод layoutSubviews(), потому что этот метод может вызываться несколько раз, и это означает, что ваше представление будет добавлено несколько раз в иерархию представлений, что приведет к потере памяти.

...