使用MVC開(kāi)發(fā),通常View會(huì)持有Model,我們只需要重寫Model的set方法,就可以完成數(shù)據(jù)的展示,但是開(kāi)發(fā)過(guò)程中,通常會(huì)遇到需要展示的頁(yè)面相同,但是數(shù)據(jù)源并不是同一個(gè)Model.這時(shí)候需要寫多個(gè)Model的set方法.
還有一種方式 ,可以創(chuàng)建一個(gè)代理,讓View需要的數(shù)據(jù)源都遵循代理即可,這樣就不用寫特別多set方法,直接上代碼
//正常來(lái)說(shuō)是這樣的
//1 創(chuàng)建model
@interface SQModel1 : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *age;
@property (nonatomic, copy) NSString *address;
@end
//2 給cell創(chuàng)建屬性
@interface SQTableViewCell : UITableViewCell
@property (nonatomic, strong) SQModel1 *model1;
@end
//3 重寫set方法
- (void)setModel1:(SQModel1 *)model1 {
_model1 = model1;
self.textLabel.text = model1.name;
self.detailTextLabel.text = model1.age;
}
現(xiàn)在需要做的是這樣
//首先創(chuàng)建一個(gè)協(xié)議
@protocol SQTableViewDelegate
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *age;
@property (nonatomic, copy) NSString *address;
@end
//2 遵守協(xié)議
@interface SQModel : NSObject<SQTableViewDelegate>
@end
//3 屬性
@interface SQTableViewCell : UITableViewCell
@property (nonatomic, weak) id<SQTableViewDelegate> delegate;
@end
//4 重寫set方法
- (void)setDelegate:(id<SQTableViewDelegate>)delegate {
_delegate = delegate;
self.textLabel.text = delegate.name;
self.detailTextLabel.text = delegate.age;
}
這樣即使是多個(gè)model,我們只需要遵守這個(gè)協(xié)議,讓后賦值給cell->delegate就可以了,不用寫那么多的set方法