当我按下按钮时,我想运行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)
}
}
答案 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
}