如何将表视图节的选定索引添加到数组

时间:2019-06-22 00:37:38

标签: swift uitableview uitableviewsectionheader

我有一个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)上的截图,以帮助直观地查看程序: enter image description here enter image description here

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 => {
    });
};

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

问题在于您的选中标记仅仅是标题的视觉特征。当用户点击对勾标记时,您只是在切换其选中状态:

@objc func handleTap(sender: UIButton) {
    sender.isSelected = !sender.isSelected
}

那是行不通的。您需要始终在处理节标题的数据模型的一部分中始终跟踪此信息。这样,单击“保存”按钮时,信息就坐在数据模型中等待着您。您的handleTap需要确定这是标题的哪个部分,并将信息反映到模型中。数据模型是事实的来源,而不是界面中的某些视图。 (令您惊讶的是,您在滚动表格视图时还没有遇到麻烦。)

您的代码的另一个问题是:

let cell = tableView.dequeueReusableCell(withIdentifier: "nameCell") as! NameHeaderTableViewCell

您不能将UITableViewCell用作可重用的节标题视图。您需要在此处使用UITableViewHeaderFooterView。