如何将 tableview 部分的选定索引添加到数组
Posted
技术标签:
【中文标题】如何将 tableview 部分的选定索引添加到数组【英文标题】:How to add selected indexes of tableview sections to an array 【发布时间】:2019-06-22 00:37:38 【问题描述】:我有一个tableView
和section headers
,我想将某个用户输入附加到多个选定的headers
。我已经创建了section headers
,并且能够更改section header
上的图像以显示它已被选中,但我想创建一个array
的选中对象。
这是我的section header
代码:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
let userModel = Data.userModels[section]
let cell = tableView.dequeueReusableCell(withIdentifier: "nameCell") as! NameHeaderTableViewCell
cell.setup(model: userModel)
cell.checkMarkButton.addTarget(self, action: #selector(handleTap), for: .touchUpInside)
cell.enable(on: false)
if isUserEditing == true
cell.enable(on: true)
return cell.contentView
这是我在用户点击该部分时更改section image
的地方:
@objc func handleTap(sender: UIButton)
sender.isSelected = !sender.isSelected
当用户单击保存button
时,我希望将用户输入附加到选择了section header
的那些单元格中。这是代码:
@IBAction func save(_ sender: Any)
//VALIDATION
guard mealItemTextField.text != "", let item = mealItemTextField.text else
mealItemTextField.placeholder = "please enter an item"
mealItemTextField.layer.borderWidth = 1
mealItemTextField.layer.borderColor = UIColor.red.cgColor
return
guard priceTextField.text != "", let price = Double(priceTextField.text!) else
priceTextField.placeholder = "please enter a price"
priceTextField.layer.borderWidth = 1
priceTextField.layer.borderColor = UIColor.red.cgColor
return
tableView.reloadData()
目前我被困在如何访问所有被选中的sections
中的indexes
(即处于选中状态的那些)以下是一些有助于可视化程序的屏幕截图:
P.S. 不确定这是否有帮助,但我使用 array
或 structs
填充数据。这是代码:
func numberOfSections(in tableView: UITableView) -> Int
return Data.userModels.count
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
if Data.userModels[section].isExpandable
return Data.userModels[section].itemModels.count
else
return 0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
var cell = tableView.dequeueReusableCell(withIdentifier: "cell")
if cell == nil
cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
cell?.textLabel?.text = Data.itemModels[indexPath.row].itemName
return cell!
感谢任何帮助,谢谢!
【问题讨论】:
【参考方案1】:问题在于您的复选标记只是标题的视觉特征。当用户点击复选标记时,您只是切换其选中状态:
@objc func handleTap(sender: UIButton)
sender.isSelected = !sender.isSelected
那是行不通的。您需要在处理节标题的数据模型的一部分中始终跟踪此信息。这样,当单击 Save 按钮时,信息就在数据模型中等待您。您的handleTap
需要确定这是哪个部分的标题,并将信息反映到模型中。数据模型是事实的来源,而不是界面中的某些视图。 (我很惊讶当您滚动表格视图时您还没有遇到此问题。)
您的代码的另一个问题是:
let cell = tableView.dequeueReusableCell(withIdentifier: "nameCell") as! NameHeaderTableViewCell
您不能将 UITableViewCell 用作可重用的节标题视图。您需要在这里使用 UITableViewHeaderFooterView。
【讨论】:
如果我能访问正确的索引,我觉得数据模型会很好。这些名称来自一组名称,我只想将食品和价格附加到所选名称。 对,你必须有一种方法可以从标题视图到它是标题的部分。以上是关于如何将 tableview 部分的选定索引添加到数组的主要内容,如果未能解决你的问题,请参考以下文章
如何将选定的 uitableviewcell 核心数据对象传递给新的视图控制器?
iPhone SDK如何将tableview中plist中的选定行传递到UIViewController