how would i use UINibs to instantiate and use a UITableViewCell for a tableview in iOS5.0. I know there is a registerNib:forCellReuseIdentifier: in iOS5.0 that also needs to be used, but am not sure how to use it
Thanks in advance for any help on this
Steps 2 and 3 can be combined, so you would use the following line in viewDidLoad:
[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];
Then, in cellForRowAtIndexPath, if you want one of the cells from the nib, you dequeue it:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
This either creates a new instance from the nib, or dequeues an existing cell.
@jrturtons answer is correct but unfortunately there's a bug in iOS 5 (fixed in iOS 6) in conjunction with VoiceOver: rdar://11549999. The following category on UITableView
fixes the issue. Just use -fixedDequeueReusableCellWithIdentifier:
instead of the normal dequeueReusableCellWithIdentifier:
. Of course, the NIB must be registered using
[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];
before (in -viewDidLoad
).
UITableView+Workaround.m:
@implementation UITableView (Workaround)
- (id)fixedDequeueReusableCellWithIdentifier:(NSString *)identifier {
id cell = [self dequeueReusableCellWithIdentifier:identifier];
if (!cell) {
// fix for rdar://11549999 (registerNib… fails on iOS 5 if VoiceOver is enabled)
cell = [[[NSBundle mainBundle] loadNibNamed:identifier owner:self options:nil] objectAtIndex:0];
}
return cell;
}
@end
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