选择行其他部分在 UITableview 中包含相同的值?
Posted
技术标签:
【中文标题】选择行其他部分在 UITableview 中包含相同的值?【英文标题】:Select row other sections contains same value in UITableview? 【发布时间】:2019-06-26 04:13:25 【问题描述】:我有多个部分,每个部分可以有多行。
代码:显示为例外。
class SampleViewController: UIViewController
let sectionArray = ["pizza", "deep dish pizza", "calzone"]
let items = [["Margarita", "BBQ Chicken", "Peproni"], ["Margarita", "meat lovers", "veggie lovers"], ["sausage", "chicken pesto", "BBQ Chicken"]]
@IBOutlet weak var listObj: UITableView!
var selectedItems = [String]()
override func viewDidLoad()
super.viewDidLoad()
registerCell()
// Do any additional setup after loading the view.
func registerCell()
self.listObj.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
extension SampleViewController : UITableViewDelegate,UITableViewDataSource
func numberOfSections(in tableView: UITableView) -> Int
return sectionArray.count
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return items[section].count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = items[indexPath.section][indexPath.row]
if selectedItems.contains(items[indexPath.section][indexPath.row])
print("Selected Item")
cell.accessoryType = .checkmark
else
print("Item not selected")
cell.accessoryType = .none
return cell
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 44
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
return sectionArray[section].uppercased()
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat
return 0
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
selectedItems.append(items[indexPath.section][indexPath.row])
tableView.reloadData()
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
selectedItems.removeAll $0 == items[indexPath.section][indexPath.row]
tableView.reloadData()
这里我想在 section 中选择行,假设 Pizza 部分包含 Margarita 行和 深盘披萨 也包含相同的值.在这里,我们需要选择两个不同部分的 rows。每当用户点击 rows 时,它必须与具有相同行的其他部分匹配,如果匹配,则必须选择所有行。
【问题讨论】:
【参考方案1】:将选定的项目名称存储在数组中并重新加载tableview
。在cellForRowAt
方法中检查数组是否有当前项。
var selectedItems = [String]()
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = items[indexPath.section][indexPath.row]
if selectedItems.contains(items[indexPath.section][indexPath.row])
print("Selected Item")
else
print("Item not selected")
return cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
tableView.deselectRow(at: indexPath, animated: true)
if selectedItems.contains(items[indexPath.section][indexPath.row])
print("Selected Item")
selectedItems.removeAll $0 == items[indexPath.section][indexPath.row]
else
print("Item not selected")
selectedItems.append(items[indexPath.section][indexPath.row])
tableView.reloadData()
【讨论】:
以上是关于选择行其他部分在 UITableview 中包含相同的值?的主要内容,如果未能解决你的问题,请参考以下文章
在 UiTableView reloadData 之后保留选定的部分/行