Swift中如何跳转回已填充数据的TableViewController?
解决点击单元格跳转TVC2显示空页面的问题
你的问题核心在于点击TVC1的单元格跳转到TVC2时,没有把选中的那条预订数据传递给TVC2,所以TVC2还是以初始空状态加载,自然显示不出之前填写的内容。下面是具体的解决步骤和代码修改:
步骤1:给TVC2添加编辑模式的属性
在AddRegistrationTableViewController里新增两个属性,分别用于接收要编辑的预订数据,以及标记这条数据在TVC1列表中的索引(方便后续更新):
// 接收要编辑的预订数据 var editingRegistration: Registration? // 标记编辑数据在列表中的索引(新增时为nil) var editIndex: Int?
步骤2:TVC2加载时填充已有数据
在AddRegistrationTableViewController的viewDidLoad方法中,添加逻辑判断:如果是编辑模式,就把editingRegistration的数据填充到各个控件中:
override func viewDidLoad() { super.viewDidLoad() // 处理编辑模式的数据填充 if let registration = editingRegistration { // 填充文本字段 firstNameTextField.text = registration.firstName lastNameTextField.text = registration.lastName emailTextField.text = registration.emailAddress // 填充日期选择器并更新标签 checkInDatePicker.date = registration.checkInDate checkOutDatePicker.date = registration.checkOutDate updateDateViews() // 填充客人数量步进器并更新标签 numberOfAdultsStepper.value = Double(registration.numberOfAdults) numberOfChildrenStepper.value = Double(registration.numberOfChildren) updateNumberOfGuests() // 填充房型信息 roomType = registration.roomType roomTypeLabel.text = registration.roomType.name // 填充WiFi开关状态 wifiSwitch.isOn = registration.wifi } }
步骤3:TVC1跳转时传递数据给TVC2
修改RegistrationTableViewController的prepare(for segue:)方法,获取选中单元格对应的预订数据,传递给TVC2的编辑属性:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "ViewReservationDetails" { // 获取选中单元格的索引 guard let indexPath = tableView.indexPathForSelectedRow else { return } let selectedRegistration = registrations[indexPath.row] // 将数据传递给目标VC if let addVC = segue.destination as? AddRegistrationTableViewController { addVC.editingRegistration = selectedRegistration addVC.editIndex = indexPath.row } } }
步骤4:修改TVC1的unwind方法,区分新增和编辑
原来的unwind方法只会新增数据,现在需要判断是新增还是编辑,对应更新列表数据:
@IBAction func unwindFromAddRegistration(unwindSegue: UIStoryboardSegue) { guard let addRegistrationTableViewController = unwindSegue.source as? AddRegistrationTableViewController, let registration = addRegistrationTableViewController.registration else { return } if let editIndex = addRegistrationTableViewController.editIndex { // 编辑模式:替换对应位置的数据 registrations[editIndex] = registration } else { // 新增模式:添加新数据 registrations.append(registration) } tableView.reloadData() }
这样修改后,点击TVC1的单元格跳转到TVC2时,就会自动填充之前填写的所有数据,修改完成点击Done按钮返回,TVC1的列表也会同步更新修改后的内容啦。
内容的提问来源于stack exchange,提问作者NotationMaster
相关产品推荐
相关产品推荐

