I have a UITableView as a subview in a UIViewController. I\'m not using UITableViewController because I have some other content that is not tableview-related taking up part of t
Here are some tips:
Basically there can be 3 ways to create and use UITableViewCell
s:
Use “prototype” cells in the storyboard/nib
(Create cell UI in the storyboard/nib inside UITableView
)
You should not use either registerClass:forCellReuseIdentifier:
or registerNib:forCellReuseIdentifier:
methods. UIStoryboard
handles it on its own, since you specified the reuseIdentifier
in the storyboard, the tableView
knows which cell is associated with which reuseIdentifier
.
Use a separate nib for tableViewCell
UI
(This might be a way to go when you want to use the same tableViewCell
in several tableView
s)
You should use registerNib:forCellReuseIdentifier:
method.
Do not use nibs, create tableViewCell
UI programmatically
You should use registerClass:forCellReuseIdentifier:
method.
Also, note that both registerClass:forCellReuseIdentifier:
and registerNib:forCellReuseIdentifier:
should be called before (most often in viewDidLoad
) dequeueReusableCellWithIdentifier:forIndexPath:
method is called. If you registered a class or a nib for the reuseIdentifier
it is guaranteed that dequeueReusableCellWithIdentifier:forIndexPath:
returns a valid cell (unlike dequeueReusableCellWithIdentifier:
).
In your code Storyboard
registered a nib
with UI for the cell, but you calling registerClass:forCellReuseIdentifier:
with the same reuseIdentifier
forced table view to unregister the nib and register the class which was not aware of IBOutlet
s.