Prototype Cells in a nib instead of a storyboard

Objective CIosXcodeNibUistoryboard

Objective C Problem Overview


For better re-usability I want to create a table view outside of my Storyboard.

Now when I create a UITableView based ViewController with Nib in Xcode I get the default TableView in the nib file. However, I am not able in Interface Builder to add prototype cells like I am in my Storyboard.

Is it currently not possible to add prototype cells in a nib or am I missing something.

Thanks very much for any help.

Objective C Solutions


Solution 1 - Objective C

iOS 5 includes a new method on UITableView: registerNib:forCellReuseIdentifier:

To use it, put a UITableViewCell in a nib. It has to be the only root object in the nib.

You can register the nib after loading your tableView, then when you call dequeueReusableCellWithIdentifier: with the cell identifier, it will pull it from the nib, just like if you had used a Storyboard prototype cell.

Solution 2 - Objective C

In Swift 4:

  1. Create new CocoaTouch Class, Subclass from UITableViewCell.

  2. Important - Enable the checkbox 'Also create XIB file' which creates a Swift file and a .xib file

  3. Add labels in the Xib, as you would do for a prototype cell in Storyboard

  4. Connect label outlets to the new swift file

  5. Important - Register the nib file in viewDidLoad

     yourTableview.register(UINib.init(nibName: "CustomCellTableViewCell", bundle: nil), forCellReuseIdentifier: "Cell")
    

    (or)

     yourTableview.register(UINib(nibName: "CustomCellTableViewCell", bundle: Bundle.main), forCellReuseIdentifier: "Cell")
    
  6. Implement the datasource and delegates as normal and typecaste to the CustomCell in cellForRowAtIndexPath.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBesiView Question on Stackoverflow
Solution 1 - Objective CRichard VenableView Answer on Stackoverflow
Solution 2 - Objective CNaishtaView Answer on Stackoverflow