我试图在两个部分中列出一些玩家的桌面视图。 第1部分是正在播放的队员,第2部分是替补队员。我有一个数据集与所有玩家。
我是如何做到这一点的,我创建了两个部分let sections = ["playing", "subs"]
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return 11
} else {
return players.count - 11
}
}
我原本希望这会让我的阵列中的前11名选手参加比赛,看起来确实如此,但是,当我滚到桌子时,当我进入下一部分时我会相信它会崩溃。我假设每个数据部分必须以indexPath为0开头?我只有一组数据。
当我的应用程序正常工作时,我希望能够在两个部分重新排序,因为他们正在玩或者是subbed。什么是iOS适当的实现方式?
这是我在indexpath方法中的行的单元格:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = playerTableView.dequeueReusableCellWithIdentifier("MatchPlayerCell")! as! MatchPlayerCell
cell.configureForMatchPlayer(orderedPlayers[indexPath.row])
return cell
}
它在EXC_BAD_INSTRUCTION崩溃了。很高兴用更多信息更新我的问题,我对iOS相对较新,并且没有尝试过移动行
答案 0 :(得分:1)
我认为最好创建3个独立的NSMutableArrays。 totalPlayers的第1名。 "打"。和#34; subs"。
然后你从totalPlayers中相应地添加/删除玩家。然后你可以在numberOfRowsInsection中正确返回[array count]。
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return players.count
} else {
return subs.count
}
}
在这个委托中进行数学计算实际上是不好的做法。因为您需要处理所有值,并且在您的情况下,如果播放器-11变得小于0,应用程序将崩溃。
答案 1 :(得分:1)
您没有提供足够的信息来解释崩溃,但作为政策的一般问题,使用单个数组(players
)来表示具有两个部分的表的数据是愚蠢的。两节?两个阵列。
否则只是要求麻烦,特别是因为这意味着您的cellForRowAt:
必须知道该模型的工作原理。这不合适。模型应该是cellForRowAt:
只是愚蠢的。部分?选择相应的数组。行?选择相应的索引。完成。不要试图在cellForRowAt:
中成为一个聪明的裤子;你结束了,呃,崩溃了。
答案 2 :(得分:1)
如果你没有超过11名玩家,它将会崩溃..请确保。
答案 3 :(得分:0)
如果你的player
有一个属性来确定他是在玩还是子,那么你可以当然使用一个数组,不管它是明智的到这样做取决于你。
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return orderedPlayers.filter { $0.playing }.count
} else {
return orderedPlayers.filter { !$0.playing }.count
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let player = orderedPlayers.filter { indexPath.section == 0 ? $0.playing : !$0.playing }[indexPath.row]
let cell = playerTableView.dequeueReusableCellWithIdentifier("MatchPlayerCell")! as! MatchPlayerCell
cell.configureForMatchPlayer(player)
return cell
}
你可以通过让看起来像这样有两个数组来实现更简洁:事实上,只有一个数组:
var players: [Player] {
return orderedPlayers.filter { $0.playing }
}
var subs: [Player] {
return orderedPlayers.filter { !$0.playing }
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return section == 0 ? players.count : subs.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let player = (indexPath.section == 0 ? players : subs)[indexPath.row]
let cell = playerTableView.dequeueReusableCellWithIdentifier("MatchPlayerCell")! as! MatchPlayerCell
cell.configureForMatchPlayer(player)
return cell
}