Is there a way to load a prototype cell, along with any IBOutlet connections as defined within a storyboard?
Update
I want to unit test the cell (a UICollectionViewCell for that mater), hence would like to load it outside of a UIViewController context.
Effectively, in the same way that you can load a custom view from a nib, specifying its file's owner and have its IBOutlet(s) set.
A prototype cell acts a template for your cell's appearance. It includes the views you want to display and their arrangement within the content area of the cell. At runtime, the table's data source object creates actual cells from the prototypes and configures them with your app's data.
A view that presents data using rows in a single column.
dequeueReusableCell(withIdentifier:)Returns a reusable table-view cell object after locating it by its identifier.
I haven't tried this with unit tests yet but you can easily put your custom UITableViewCell
into a separate nib.
For using it in your view controllers you need to register the cell with your tableViews.
UINib *nib = [UINib nibWithNibName:@"ABCNameOfYourNibCell" bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:@"myCustomCell"];
Then use the cell like this in cellForRowAtIndexPath:
static NSString *CellIdentifier = @"myCustomCell";
ABCNameOfYourNibCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
For your testing purposes you should be able to go with:
ABCNameOfYourNibCell *testCell =
[[ABCNameOfYourNibCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier:nil];
If you need to test reuse-behaviour, you should set a reuseIdentifier here and call prepareForReuse
on the cell.
Normally you crete an UITableViewController
or a UITableView
. Than you should also create a UITableViewCell
class. After creating the UITableViewCell
class, go to the `UIStoryboard, select the cell :
Then set the UITableViewCell
class inside the Identity Inspector
:
Now add elements to the UITableViewCell
and connect them with your class
Now add the CellIdentifier
inside the Attributes Inspector
:
No got to your UITableViewController
or the UIViewController
where you have the UITableViewDelegate
methods and call your cell like this (don't forget to #import
the UITableViewCell
class at the top of your ViewController
:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"MyIdentifier";
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
[cell.label setText:[NSString stringWithFormat:@"My Cell at Row %ld",
(long)indexPath.row]];
return cell;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With