Более одного табличного представления (например, сетки) на ViewController программно? - PullRequest
0 голосов
/ 22 октября 2019

Я хочу построить пользовательский интерфейс с динамической сеткой. По крайней мере, я думаю, что сетка - это путь. Элементы управления каждой ячейки должны быть одинаковыми, например: TextBox a Checkbox a radiobutton.

У меня есть несколько таблиц на странице. Таблица заполняется в соответствии с данными из базы данных. В каждой строке может быть разное количество ячеек, и я подумал об использовании динамически создаваемого столбца. Я не мог установить точную логику этого. Ниже я настрою, как это сделать. Можете ли вы объяснить простую логику с помощью примера кода?

Если есть неясное место, вы можете спросить?

Спасибо.

    func createTableView(id: Int)-> UIView
    {
             let tableAreaView = UIView()
            tableAreaView.backgroundColor = UIColor.blue
//               tableAreaView.isHidden = true

            let customTableView = UITableView()
             customTableView.separatorStyle = .none
             tableAreaView.addSubview(customTableView)
        let celll:tablecell = tablecell()
        celll.setColumnElement(gridID: 1, listype: "Checkbox")

        customTableView.register(celll.self, forCellReuseIdentifier: "cell")
             customTableView.dataSource = self
             customTableView.delegate = self

        return tableAreaView
    }




    func numberOfSections(in t: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 50
    }

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerDynamicallyTable = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.frame.width, height: 50))
        headerDynamicallyTable.backgroundColor = Utility.getColor(red: 233, green: 235, blue: 237)


        for i in 0...self.listColumnArray.count {
            let  title = UILabel()
            headerDynamicallyTable.addSubview(title)
            title.translatesAutoresizingMaskIntoConstraints = false
            //self.titleTextArea.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
            title.leftAnchor.constraint(equalTo: headerDynamicallyTable.leftAnchor, constant: CGFloat(30 * i)).isActive = true
            title.topAnchor.constraint(equalTo: headerDynamicallyTable.topAnchor, constant: 20).isActive = true
            //name.rightAnchor.constraint(equalTo: createDateText.leftAnchor).isActive = true
            //self.titleTextArea.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
            title.font = UIFont(name: Utility.getFont(2), size: 22)
        }



        return headerDynamicallyTable
    }

    func tableView(_ t: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.listRowArray.count
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 50
    }

    func tableView(_ t: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath as IndexPath) as! tablecell

        let item = self.listRows.object(at: indexPath.row) as! tablecell


        return cell
    }

клетка

   var navigationController: UINavigationController?
    var listColumn:[listElement] = []
    var listType :String
    var containerArea: UIView!


    public func setColumnElement(gridID:Int,listype:String) {

        self.listColumn= listDataSource.getColumnsBygridID(gridID: gridID)!
        self.listType = listype

    }


    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)


        self.containerArea = UIView()
        contentView.addSubview(self.containerArea)

        self.containerArea.backgroundColor = color.ThemaColor(color: .Red)
        self.containerArea.translatesAutoresizingMaskIntoConstraints = false
        self.containerArea.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 10).isActive = true
        self.containerArea.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 15).isActive = true
        self.containerArea.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: 5).isActive = true
        //container.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: 20).isActive = true
        self.containerArea.heightAnchor.constraint(equalToConstant: 400).isActive = true
        //self.containerArea.widthAnchor.constraint(equalTo: contentView.widthAnchor).isActive = true
        self.containerArea.widthAnchor.constraint(equalTo: contentView.widthAnchor).isActive = true
        self.containerArea.layer.borderWidth = 1
        self.containerArea.layer.masksToBounds = false
        self.containerArea.layer.borderColor = Utility.getThemeColor(color: .Seperator).cgColor
        self.containerArea.clipsToBounds = true

        for i in 0...self.checklistColumnElement.count{
            if( self.listType == "Textbox")
            {
                let  text = UITextField()
                containerArea.addSubview( text)
                text.translatesAutoresizingMaskIntoConstraints = false
                text.leftAnchor.constraint(equalTo: self.containerArea.leftAnchor, constant: CGFloat(30 * i)).isActive = true
                text.topAnchor.constraint(equalTo: self.containerArea.topAnchor, constant: 20).isActive = true
                text.font = UIFont(name: Utility.getFont(2), size: 22)
            }

            if( self.listType == "Checkbox")
            {
                let checkbox = UIButton()
                containerArea.addSubview(checkbox)
                checkbox.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
                checkbox.widthAnchor.constraint(equalToConstant: 30).isActive = true
                checkbox.leadingAnchor.constraint(equalTo: containerArea.trailingAnchor, constant: 160).isActive = true
                checkbox.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
                checkbox.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
                checkbox.heightAnchor.constraint(equalTo: self.heightAnchor).isActive = true
                checkbox.setImage(UIImage(named: "checked.png"), for: UIControlState.selected)
                checkbox.setImage(UIImage(named: "emptyCheck.png"), for: UIControlState.normal)
                checkbox.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside)
            }
            if( self.listType == "Radiobutton")
            {

            }


        }

        let seperator = UIView()
        contentView.addSubview(seperator)

        seperator.translatesAutoresizingMaskIntoConstraints = false
        seperator.heightAnchor.constraint(equalToConstant: 1).isActive = true
        seperator.rightAnchor.constraint(equalTo: contentView.rightAnchor).isActive = true
        seperator.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
        seperator.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true

    }

    @objc private func buttonClicked(sender: UIButton) {


    }

Лучше ли использовать представление с прокруткой и просмотр стека вместо представления таблицы?

Потому что мне тоже нужно получить ответы

Как сделать это быстрее всего?

...