[swift-users] Issues with UITableView*
Ole Begemann
ole at oleb.net
Mon Sep 12 17:08:42 CDT 2016
> The current version of my code seems to satisfy points #1-3, but crashes
> when attempting to deal with #4 - and I’m not sure that what I’ve done
> is “good” or “correct” in terms of satisfying the first three points.
I haven't looked at all of your code, but one thing that could
definitely cause problems is that you're calling
`dequeueReusableCellWithIdentifier` from
`tableView(_:didDeselectRowAtIndexPath:)` and
`tableView(_:didSelectRowAtIndexPath`). Don't do that.
`dequeueReusableCellWithIdentifier` creates a new cell (or fetches an
unused one from the table view's reuse pool). You should only ever call
it from inside `tableView(_:cellForRowAtIndexPath:)`.
In `didSelectRow...` and `didDeselectRow...`, you want to ask the table
view for the _existing_ cell at the specified index path. Do this with
something like:
if let cell = tableView.cellForRowAtIndexPath(indexPath) {
// cell found, do something with it
...
} else {
// No cell exists at this index path.
// This probably doesn't happen in these callbacks,
// but you never know.
}
Note that while `tableView.cellForRowAtIndexPath(indexPath)` looks very
much like the data source method you implemented above, it is a
different method. This one is a method on `UITableView`, not
`UITableViewDataSource`.
Hope this helps,
Ole
More information about the swift-users
mailing list