IOS封裝自定義Cell方法
阿新 • • 發佈:2019-02-06
很多時候Objective-C自帶的cell樣式根本無法滿足我們的開發需求,身邊又會有產品美工時不時盯著,一點偏差都不能有,於是不得不自己去建立cell。自定義cell的最簡便方式就是在tableview的cellforrow方法裡去佈局cell的樣式,但這樣就不可避免的會造成Controller程式碼量超多,非常臃腫,因此實際開發中我們應當多應用封裝的思想。
首先我們先自定義個Cell:
- @interface Mycell : UITableViewCell
- +(instancetype)cellWithtableView:(UITableView *)tableview;
- @property
- @property(nonatomic,weak) id<MycellDelegate> delegate;
- @end
上述程式碼中的代理是cell中自定義按鈕的點選事件,詳情可見上一篇博文。
在.m檔案中實現類方法:
- +(instancetype)cellWithtableView:(UITableView *)tableview
- {
- staticNSString *ID = @"cell";
- Mycell *cell = [tableview dequeueReusableCellWithIdentifier
- if(!cell)
- {
- cell = [[Mycell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
- cell.selectionStyle = UITableViewCellSelectionStyleNone;
- cell.textLabel.font = [UIFont systemFontOfSize:13.0];
- }
- return cell;
- }
- //重寫佈局
- -(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier
- {
- self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
- if(self)
- {
- self.button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, self.frame.size.height)];
- [self.button setTitle:@"我是按鈕點我" forState:UIControlStateNormal];
- [self.button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
- self.button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;
- self.button.titleLabel.font = [UIFont systemFontOfSize:12.0];
- [self.contentView addSubview:self.button];
- [self.button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
- }
- returnself;
- }
通過一系列方法封裝後,我們在viewcontroller中只需要少量程式碼即可完成自定義cell的建立。
- -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- Mycell *cell = [Mycell cellWithtableView:tableView];
- cell.model = self.Array[indexPath.row];
- cell.delegate = self;
- return cell;
- }
如此一來不僅完美的完成了cell的自定義建立,程式碼看起來也很美觀,在同事review程式碼的時候就可以避免被吐槽的尷尬==。當然了,還會有另一種情況就是不同行數的cell長得不一樣,我的做法是在類方法中加個引數,indexPath,傳入這個引數,可以讓類方法根據不同的行數建立不同的cell。