如何在uitableview didselect方法中将单个变量中的多个值存储起来

时间:2017-12-26 13:38:09

标签: ios swift uitableview

我是swift的新手我不知道如何在单值中传递多值。我可以使用多个选择何时传递到下一页。所以如何在singlevalue中存储多个值。一个人帮我?我的代码是

var strRoomType = ""  
var strroomtype = []
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
    let proModel = arrSpaceData[indexPath.row] as? RoomPropertyModel
    let propertyView = self.storyboard?.instantiateViewController(withIdentifier: "DepartureLocationVC") as! DepartureLocationVC
    propertyView.strRoomType = (proModel?.property_id as String?)!
  //  propertyView.strroomtype = (proModel?.property_id as String?)!
    self.navigationController?.pushViewController(propertyView, animated: true)
}

2 个答案:

答案 0 :(得分:3)

您必须收集所有选定行的indexpaths。获取所选objects/models的数组indexpaths并将其存储在单个数组中。然后,您可以将整个数组传递到下一个viewcontroller或您想要使用的任何位置。如果要在行选择中导航到下一个viewcontroller,则总会有一个object/model,因此您不需要数组。您可以简单地将整个对象/模型传递给下一个viewcontroller

答案 1 :(得分:1)

假设你有两个控制器,其中一个显示TableView中的学生列表,然后另一个控制器被推送,只显示一个学生信息。

首先,您需要将所有需要的信息分组到structclass,我将使用struct,因为它是值类型。 (如果您不知道,请查阅参考值与值类型)

struct Student {
   let name: String  // using let prevent your fields from being changed or mutated
   let age: Int 
}
  

假设我们进入第一个包含UITableView

的Controller

这就是你如何设置你的tableView:

1)填充tableView的数组看起来像arr = [Student]()

2)假设您使用的是默认UITableViewCell,您可以设置cell.textLabel.text = arr[indexPath.row].namecell.detailTextLabel?.text = String(arr[indexPath.age])等字段

3)numberofitemsinsection将为arr.count

我的意思是你得到了要点......

   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        /* here you have many options 
           on how to pass the **selected data** to the detail controller.
         1) injecting the data into the detail controller via the initializer/ constructor  
         2) via property 
         3) injecting via method such as func setStudent(_ student: Student)
         4) etc...
        */

       let vc = DetailViewController(student: arr[indexPath.row])          
       self.navigationController?.pushViewController(vc, animated: true)
    }
  

DetailViewController

final class DetailViewController: UIViewController {
   private let student:Student 
   private let nameLabel:UILabel ....

   init(student: Student) { //<--- injecting the student object into the controller 
     self.student = student 
     self.init(nibName: nil , bundle: nil)
   }

  // now you have the student do whatever you want with it 
  override func viewDidLoad() {
      super.viewDidLoad()
       nameLabel.text = student.name 
   }
}