【问题标题】:Tableview passing same data to another TableviewTableview 将相同的数据传递给另一个 Tableview
【发布时间】:2016-05-21 20:10:17
【问题描述】:

我有一个通过 Tableview 显示玩家的应用程序。用户可以“添加”一个新玩家并输入他的姓名、身高、体重、照片等……保存后将被添加到 Tableview 中。他们还可以点击每个玩家,然后将他们带到玩家详细视图控制器,在该控制器中显示您输入的所有信息(姓名、身高、体重、投掷、球棒、位置等)。这是用户点击播放器以将其带到播放器详细信息页面时的当前代码:

var player2 = [Player]()

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "detail" {
        let playerDetailScreen = segue.destinationViewController as! PlayerDetailViewController

        if let selectedPlayerCell = sender as? PlayerListTableViewCell {
            let indexPath = tableView.indexPathForCell(selectedPlayerCell)!
            let selectedPlayer = player2[indexPath.row]

            playerDetailScreen.playereDetail = selectedPlayer
        }

    }
}

我正在尝试在视图控制器中实现一个表格视图,用户可以在其中添加一个新播放器并输入信息。这个表格视图是用户可以添加某人参加过的球队或年份的地方(我使用表格视图,因为条目的数量可能会有所不同)。我的问题是最好的方法是什么?现在我有一个名为 Teams.swift 的第二类,用于这个特定的表视图,但这是最好的方法吗?这个想法是然后在详细信息页面上的表格视图中显示这些数据(同样,因为条目的数量会有所不同)所以我如何将数据从一个表格视图传递到另一个?

我应该去掉 [Teams] 类并把它放在 [Player] 类下面吗?任何想法将不胜感激!

【问题讨论】:

  • 最好在一个 ViewController 中分发你的功能而不是编写杂乱的代码。但这取决于您的应用流程。

标签: swift uitableview segue


【解决方案1】:

首先,我建议使用:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    // what happens when user selects a cell
let cell = self.tableView.cellForRowAtIndexPath.indexPath // This will give you cell that was selected
let selectedPlayer = cell.player  // This gives you the instance of the player (Benefit of using player class)
self.performSegueWithIdentifier("identifier", sender : selectedPlayer)

// ^ This will automatically call prepareforseque method.
}

下一步,在 prepareforsegue 方法中,这样做:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "detail" {
    let playerDetailScreen = segue.destinationViewController as! PlayerDetailViewController

    let selectedPlayer = sender as! Player
    playerDetailScreen.name = self.selectedPlayer.name
    playerDetailScreen.height = self.selectedPlayer.height
    ... so on.
   // So, remember to create property for each name, height, etc. 
   // inside playerDetailScreen
   // This is how you can transfer data


    }

}

}

【讨论】:

  • 太好了,谢谢您的建议!在 didSelectRowatIndexPath 中,对于 let slectedPlayer = cell.player 它说“没有成员玩家” 你从哪里得到 cell.player?
  • 你好,我建议你为你的单元创建一个单独的类。在该类中创建一个属性 Player(玩家类的实例)。这不一定是 UIOutlet,只是用来携带有关播放器的信息
  • 要更好地理解这一点,请观看此视频:YouTube 上的“XCode 5 Tutorial Table View Part 1 - Populating The Table - Geeky Lemon Development”。
猜你喜欢
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多