You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:23:35