当我在表格视图中按下活动按钮

时间:2019-04-14 14:03:04

标签: swift uitableview

当我按下按钮时,我想运行Tableview cellForRowAt函数。但是我不想在不按按钮时调用cellForRowAt。因为cellForRowAt函数在应用程序打开后立即起作用。按下按钮,如果newdevicechipnumber.ishidden == false,我想在中运行该功能。我希望按下Newdeviceadd按钮时该功能能够正常工作。

    class MainTableViewController: UITableViewController {

 let newdeviceadd: UILabel = {

        let topAlignment: SMIconLabel.VerticalPosition = .top

        let labelLeft = SMIconLabel()
        labelLeft.isHidden = true
        labelLeft.text = "Cihazı Ekle"
        labelLeft.font = UIFont(name: "Avenir-Black", size: 23)
        labelLeft.textColor = UIColor.flatWhite
        labelLeft.translatesAutoresizingMaskIntoConstraints = false
        labelLeft.icon = UIImage(named: "homepage")    // Set icon image
        labelLeft.iconPadding = 5                  // Set padding between icon and label
        labelLeft.numberOfLines = 0                // Required
        labelLeft.iconPosition = ( .left, topAlignment )
        labelLeft.textAlignment = .left
        return labelLeft
    }()

    var items: [Device] = []
        var itemsnew: [NewDevice] = []

        let cellId: String = "cellId"

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


            let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! DeviceTableViewCell
            let selectedIndexPaths = tableView.indexPathsForSelectedRows
            let rowIsSelected = selectedIndexPaths != nil && selectedIndexPaths!.contains(indexPath)
            cell.accessoryType = rowIsSelected ? .checkmark : .none

            if newdevicechipnumber.isHidden == false {
                let deviceItemNew: NewDevice = itemsnew[indexPath.row]
                cell.new = deviceItemNew
                cell.titleNew.text = deviceItemNew.title
                cell.title1New.text = deviceItemNew.places
                cell.titlesaatNew.text = deviceItemNew.time
                cell.buttonNew.isOn = deviceItemNew.state
                cell.buttonNew.isHidden = hideBtn
                cell.buttonNew.addTarget(self, action: #selector(refreshDataNew), for: .touchUpInside)

             }

    }

2 个答案:

答案 0 :(得分:0)

一种方法是在ViewController中存储一些状态,然后在按下按钮时翻转该状态。如果这样做,那么可以告诉numberOfRowsInSection函数,如果尚未按下该按钮,则返回零;如果按下该按钮,则返回真数字。

答案 1 :(得分:0)

选项1:您可以使用bool来触发UITableView的填充。假设我们将其称为shouldPopulate,并且在您的控制器顶部定义了它。

var shouldPopulate: Bool = false

使用shouldPopulate来触发正确的行数或0

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return shouldPopulate ? yourNumberOfRows : 0
}

然后,在点击按钮时,将shouldPopulate定义为true并重新加载数据。

@IBAction func buttonTapped(_ sender: Any) {
    self.shouldPopulate = true
    self.tableView.reloadData()
}

选项2:如果您想获得特定的行为,则可以在内部使用UIViewController的{​​{1}},胜过UITableView

例如,不要在UITableViewController中设置TableView Data Source,而是在操作函数中定义它。

viewDidLoad

设置数据源应重新加载数据,您无需调用@IBAction func buttonTapped(_ sender: Any) { self.tableView.dataSource = self }