从选定的tableView cell.row中传递文本以填充文本框xcode

问题描述

我有一个tableView,它允许用户从数据数组中进行多项选择

image1

用户单击完成时,我希望将选定的文本然后转移到另一个tableViews textView

image2

有没有一种方法可以转移所选文本并使文本之间用,分隔?

我正在以编程方式进行编码。

    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()