Like the UITableView, we need to implement a class to draw the cell content, and this class should inherit from AQGridCell. the downside of this method is , we need to draw the whole cell UI use code, if it is simple cell , that should be fine. but I don't want to write too much code which can be done with a xib file. so I was thinking how to load a xib file on the fly. it does take me sometime to figure it out, thus I write it down, hope someone else still want to do the same thing can benefit from this, also for myself , if later on I need to implement similar features, I can come back to read it, my long term memory is bad.
So here it is.
First of all, I create a class and inherit it from UIView,
#import <UIKit/UIKit.h>
@interface TVViewCellWithUI : UIView
{
}
Then I create a xib file call it , TVViewCellWithUI.xib, pretty simple , put one UIImagView and a couple labels on it,
On the view, I set the view is "TVViewCellWithUI"
Then I can create outlet, actions stuff with drag and drop in TVViewCellWithUI class.
then , the tricky part is , how I create the AQGridCell , refer to the following snapshot.
so what I did is , first of all I create an instance of TVViewCellWithUI and then use NSBundle to load the TVViewCellWithUI xib file dynamically. after that , assign the first element of the array to TVViewCellWithUI instance.
TVViewCellWithUI *vClass = [[TVViewCellWithUI alloc] init];
NSArray* array = [[NSBundle mainBundle] loadNibNamed:@"TVViewCellWithUI" owner:vClass options:nil];
vClass = [array objectAtIndex:0];
Note, NSArray* array = [[NSBundle mainBundle] loadNibNamed:@"TVViewCellWithUI" owner:vClass options:nil]; the type of owner parameter should match with the type of the root view which we specified in the xib file, in my cause it is TVViewCellWithUI.
if a different type of instance has been passed in as the owner, you will get unexpected result, for me , the function will stuck there without return control to you.
after all these , create an instance of AQGridViewCell , and also add the TVViewCellWithUI into
filledCell = [[AQGridViewCell alloc] initWithFrame:vClass.frame reuseIdentifier:FilledCellIdentifier];
[filledCell.contentView addSubview:vClass];
In this way, we can take advantage of the xib file which we can easily change the UI without writing extra code.