H R*_*val 2 uibutton uitableview ios swift
好吧,我知道这些类型的问题以前由 SO 回答过,但我的问题不大,所以请阅读。
我在 tableview 单元格内使用按钮。单击按钮时,我会显示一个带有操作列表的 AlertViewController。在选择操作时,我的按钮文本和我的自定义模型类属性发生了变化。
单击按钮时按钮文本会发生变化。但我的问题是单元格不存储按钮状态。如果我更改第一个单元格的按钮,然后单击第二个单元格按钮,则所有其他按钮都恢复为默认文本。
这是我的代码
设置单元格数据
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("dbColumns", forIndexPath: indexPath) as! CustomColumnTableViewCell
let column = columns[indexPath.row]
cell.dbColumnName.text = column.name
cell.dbColumnOrder.titleLabel?.text = column.order
cell.dbColumnOrder.tag = indexPath.row
print(columns)
cell.dbColumnOrder.addTarget(self, action: #selector(ViewController.showAlert(_:)), forControlEvents: UIControlEvents.TouchUpInside)
return cell
}
Run Code Online (Sandbox Code Playgroud)
单击按钮时的操作
//MARK:Show Alert
func showAlert(sender:UIButton){
let alert = UIAlertController(title: "Column Order", message: "Please select column order", preferredStyle: .ActionSheet)
let index = sender.tag
let indexPath = NSIndexPath(forRow: index, inSection: 0)
alert.addAction(UIAlertAction(title: "None", style: .Default, handler: { (action) in
//execute some code when this option is selected
self.columns[index].order = "None"
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
}))
alert.addAction(UIAlertAction(title: "Assending", style: .Default, handler: { (action) in
//execute some code when this option is selected
self.columns[index].order = "Assending"
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
}))
alert.addAction(UIAlertAction(title: "Desending", style: .Default, handler: { (action) in
//execute some code when this option is selected
self.columns[index].order = "Desending"
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
}))
self.presentViewController(alert, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
请麻我。
在cellForRowAtIndexPath方法中像这样设置按钮文本首先删除这个
cell.dbColumnOrder.titleLabel?.text = column.order
Run Code Online (Sandbox Code Playgroud)
替换这个
cell.dbColumnOrder.setTitle("\(column.order)", for: .normal)
Run Code Online (Sandbox Code Playgroud)
还有一件事你需要增加cell.dbColumnOrder宽度。
希望它有效
| 归档时间: |
|
| 查看次数: |
1641 次 |
| 最近记录: |