首页 > 解决方案 > 带有多个视图的表格视图

问题描述

我是 iOS 开发的新手。如果我的问题太基本,我希望得到帮助并道歉。我刚刚习惯了UITableViewControllerDelegate,DataSource。

我有FirstViewController喜欢的照片在此处输入图像描述

当用户在 segmentedController 中触摸时,TableViewCell 将重新加载数据以显示正在放映的电影和即将上映的电影(只是一个简单的电影预订座位应用程序,用于我的学习目的)。

在此处输入图像描述

我发现多个视图存在问题。
当用户选择单元格时。
如何为每个重新加载数据分配标识符,以便在单击单元格时将数据传递给另一个 ViewController(例如:DetailViewUpcomingDetailViewShowing)。在这里,我有另外两个视图控制器来记录有关即将上映的电影和正在放映的电影的详细信息。(图像、名称、日期和反向按钮......等)

在此处输入图像描述

如果可能的话,我只需要想法方面的帮助。或者代码描述很好。虽然我尝试在函数中实现 segue:tableview (_tableView: UITableView, didSelectRowAt indexPath: IndexPath) 但我的程序没有按预期执行。因为我在使用 segmentedControll 时遇到了问题(我认为问题就在这里)

我以前读过这篇文章

感谢你所做的一切

标签: iosswiftuitableviewsegue

解决方案


您需要实现的逻辑是:

  1. 检查segmentedIndex 以了解用户是否希望看到Upcoming 或Showing。
  2. 按照步骤 1 加载带有电影的 tableView。
  3. 当用户点击单元格时,使用 segmentedIndex 来确定您是否应该选择 Upcoming 或 Showing 数组中的电影。
  4. 获取该电影的 ID 并将其发送到相应的 DetailsViewController。现在您有了movieID,使用它从您的数据库中请求电影的详细信息。

    func tableView(_ tableView:UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell") as? TableViewCell else { return UITableViewCell() }
    
    switch segmentedControl.selectedSegmentIndex {
    case 0:
        //handle the set up of Upcoming cells
    
    case 1:
       //handle the setup of Showing cells
    
    default:
        break
    }
    return cell  
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
    switch segmentedControl.selectedSegmentIndex {
    
    case 0:
        let DetailViewUpcoming = self.storyboard?.instantiateViewController(withIdentifier: "DetailViewUpcoming") as! DetailViewUpcoming
    
        DetailViewUpcoming.init(forMovie: upcomingArray[indexPath.row].movieID)
        self.navigationController?.pushViewController(DetailViewUpcoming, animated: true)
    
    
    
    case 1:
        let DetailViewShowing = self.storyboard?.instantiateViewController(withIdentifier: "DetailViewShowing") as! DetailViewShowing
    
        DetailViewShowing.init(forMovie: showingArray[indexPath.row].movieID)
        self.navigationController?.pushViewController(DetailViewShowing, animated: true)
    
    
    default:
        break
    
    }
    }
    
    
    @IBAction func segmentedTapped(_ sender: Any) {
    tableView.reloadData()
    }
    

在里面为movieID声明一个变量并添加一个初始化DetailViewUpcomingDetailViewShowing

var movieID: String?

init(movieID:String){
 self.movieID = movieID
}

现在,当您加载视图时,使用上面movieID的内容来请求电影详细信息并将它们分配给您认为合适的属性。


推荐阅读