我有一个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()
}
当前,我停留在如何访问所选indexes
中所有sections
(即处于选中状态的array
)上的截图,以帮助直观地查看程序:
PS 。不确定这是否有帮助,但是我用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!
}
填充了数据。这是代码:
uploadHandler = () => {
const formData = new FormData();
formData.append(
"myFile",
this.state.selectedFile,
this.state.selectedFile.name
);
axios({
method: "post",
url: "/",
data: formData
}).then(response => {
});
};
感谢您的帮助,谢谢!
答案 0 :(得分:1)
问题在于您的选中标记仅仅是标题的视觉特征。当用户点击对勾标记时,您只是在切换其选中状态:
@objc func handleTap(sender: UIButton) {
sender.isSelected = !sender.isSelected
}
那是行不通的。您需要始终在处理节标题的数据模型的一部分中始终跟踪此信息。这样,单击“保存”按钮时,信息就坐在数据模型中等待着您。您的handleTap
需要确定这是标题的哪个部分,并将信息反映到模型中。数据模型是事实的来源,而不是界面中的某些视图。 (令您惊讶的是,您在滚动表格视图时还没有遇到麻烦。)
您的代码的另一个问题是:
let cell = tableView.dequeueReusableCell(withIdentifier: "nameCell") as! NameHeaderTableViewCell
您不能将UITableViewCell用作可重用的节标题视图。您需要在此处使用UITableViewHeaderFooterView。