问题描述
我有一个tableView,它允许用户从数据数组中进行多项选择,
当用户单击完成时,我希望将选定的文本然后转移到另一个tableViews textView
有没有一种方法可以转移所选文本并使文本之间用,分隔?
我正在以编程方式进行编码。
var checked = [Int]()
var items = [String]()
var selectedItems = [String]()
@objc func done() {
let hud = JGProgressHUD(style: .dark)
hud.textLabel.text = "Saving!"
hud.show(in: view)
dismiss(animated: true,completion: nil)
hud.dismiss()
let aCell = aboutCell(style: .default,reuseIdentifier: nil)
aCell.textField3.text = selectedItems.joined(separator: ",")
}
override func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
if tableView.cellForRow(at: indexPath)?.accessoryType == UITableViewCell.AccessoryType.checkmark {
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCell.AccessoryType.none
} else {
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCell.AccessoryType.checkmark
if selectedItems.contains(items[indexPath.row]) {
selectedItems.remove(at: selectedItems.firstIndex(of: items[indexPath.row])!)
} else {
selectedItems.append(items[indexPath.row])
}
checked.append(indexPath.row)
}
}
解决方法
根据我对问题的理解,这些是我的想法:
1。首先设置必要的变量
var items = [String]() // data to display in tableview
var selectedItems = [String]() // here all the selected datas are stored
2。通过 didSelectRowAt 委托方法
存储选定的项目数据func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
if selectedItems.contains(items[indexPath.row]) { //check if the selected already contains the items and if contains remove it
selectedItems.remove(at: selectedItems.firstIndex(of: items[indexPath.row])!)
} else { // append the required items
selectedItems.append(items[indexPath.row])
}
// ..... other codes here
}
3。在完成按钮上
let requiredText = selectedItems.joined(separator: ",")
// pass this data through delegate method
,
无需为所选项目创建数组。您可以在选择一行时简单地调用tableview方法selectRow(at:animated:scrollPosition:)
,而当您需要获取选定的行时,只需调用tableview实例属性indexPathsForSelectedRows
。然后,您只需要用逗号将选定的行连接起来,并在textview或textfield中使用结果字符串。不要忘记对didDeselectRowAt
实施deselectRow
项目方法。
p1()