IOS 多種Cell的優化處理

當前應用都會比較複雜,一個tableView的列表會有多種cell,若是都放在控制器中處理,各類cell利用if,switch判斷也會達到效果,可是控制器就會變得很臃腫。其實咱們能夠利用協議來處理達到效果。而且控制中就不多的代碼 1.咱們能夠建立一個協議文件ModelConfigProtocol.hgit

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@protocol ModelConfigProtocol <NSObject>

@optional

///獲取cell的複用標識
 -(NSString *)cellReuseIdentifier;

///獲取cell的高度
 -(CGFloat)cellHeightWithindexPath:(NSIndexPath*)indexPath;
///點擊事件
 -(void)cellDidSelectRowAtIndexPath:(NSIndexPath*)indexPath other:(_Nullable id)other;
 -(UITableViewCell*)tableView:(UITableView *)tableView reuseIdenyifier:(NSString *)reusedItentifier;
@end
複製代碼

2.建立一個基類模型 BaseModel.h,而且遵照協議,實現協議方法github

#import "BaseModel.h"

@implementation BaseModel

- -(NSString *)cellReuseIdentifier {

    return @"";
}
 -(CGFloat)cellHeightWithindexPath:(NSIndexPath *)indexPath {

    return 0.0;
}
 -(void)cellDidSelectRowAtIndexPath:(NSIndexPath *)indexPath other:(id)other {

    
}
 -(UITableViewCell*)tableView:(NSString *)tableView reuseIdenyifier:(NSString *)reusedItentifier {

    UITableViewCell *cell = [[UITableViewCell alloc]init];
    
    return cell;
}
@end
複製代碼

3.建立一個基類Cell,其他cell繼承基類Cell,而且設置遵照協議的模型爲其屬性 @property(nonatomic,strong)idmodel;swift

子類Cell重寫model的set方法,基類的cell的model的set方法實現一下,不須要作處理,真正處理的是放在子類的cell裏,根據具體事務具體分析。markdown

4.控制器中建立cell的時候就能夠不用判斷來寫了oop

-(void)viewDidLoad {

    [super viewDidLoad];
    
    AModel *modelA = [[AModel alloc]init];
    
    BModel *bmodel = [[BModel alloc]init];
    
    CModel *cmodel = [[CModel alloc]init];
    
    DModel *dmodel = [[DModel alloc]init];
    
    self.dataArray = [NSMutableArray array];
    
    [self.dataArray addObject:modelA];
    
    [self.dataArray addObject:bmodel];
    
    [self.dataArray addObject:cmodel];
    
    [self.dataArray addObject:dmodel];
    
    
    self.tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
    
    self.tableView.dataSource = self;
    
    self.tableView.delegate = self;
    
    self.tableView.backgroundColor = [UIColor whiteColor];
    
    [self.view addSubview:self.tableView];
    
    self.tableView.tableFooterView = [[UIView alloc]init];
    
    [self.tableView reloadData];
    
}
 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return self.dataArray.count;
}
 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    id <ModelConfigProtocol>model = self.dataArray[indexPath.row];
    
    BaseCell *cell = (BaseCell *)[model tableView:tableView reuseIdenyifier:[model cellReuseIdentifier]];
    
    cell.model = model;
    
    return cell;
}
 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    id <ModelConfigProtocol>model = self.dataArray[indexPath.row];
    
    return [model cellHeightWithindexPath:indexPath];
}
複製代碼

oc,swift demo地址 github.com/suifumin/Mo…ui

相關文章
相關標籤/搜索