1. 程式人生 > >iOS開發學習-自定義控制元件賦值問題--在model的set方法中給控制元件賦值

iOS開發學習-自定義控制元件賦值問題--在model的set方法中給控制元件賦值

在自定義控制元件的過程中,剛開始的時候碰到問題是如何給各控制元件動態賦值,最初的想法是把各控制元件屬性放在.h檔案中定義.然後在控制器內獲取資料一一賦值(可行),但是這樣就增加了控制器中的程式碼,比如給定一個場景:

collectionViewCell中,有10個控制元件,需要顯示10個數據,這樣的話就要在代理cellForRowAtIndexPath中進行十次賦值,會比較麻煩。

在學會使用在set方法中進行賦值後,cellForRowAtIndexPath中的程式碼量就減少了很多

一般情況是自定義cell會有對應的資料模型,在自定義cell的.h檔案中property一個model屬性,然後在setModel方法中將model的各屬性值賦值給控制元件。在控制器的cellForRowAtIndexPath代理方法中,得到存有對應資料的模型,建立cell時cell.model = model就可以了,model在值發生改變的時候就會呼叫自己的set方法,控制元件就被賦值了。

以上的都是自己的理解,僅供參考

 

------------------------------- 程式碼示例 -------------------------------

模型程式碼-------------

@interface CheckCollectionViewCellModel : NSObject

@property (nonatomic, copy) NSString *checkType; //檢查型別

@property (nonatomic, copy) NSString *waitingLineNumber; //前面的排隊人數

@property (nonatomic, copy) NSString *sumCheckerNumber; //總掛號量

@property (nonatomic, copy) NSString *waitTime; //等待時間

@property (nonatomic, copy) NSString *lineNumber; //排隊號碼

@property (nonatomic, copy) NSString *currentNumber; //當前叫號

@end

 

cell.h-------------

@class CheckCollectionViewCellModel;

@interface CheckCollectionViewCell : UICollectionViewCell

@property (nonatomic, strong) CheckCollectionViewCellModel *checkModel;

@end

cell.m-------------  關鍵賦值

- (void)setCheckModel:(CheckCollectionViewCellModel *)checkModel {

    _checkModel = checkModel;

    

    self.checkType.text = checkModel.checkType;

    self.waitingNumberLabel.centerLabel.text = checkModel.waitingLineNumber;

 self.numberWithTimeLabel.topDataLabel.text = [NSString stringWithFormat:@"共有%@位", checkModel.sumCheckerNumber];

    self.numberWithTimeLabel.buttomDataLabel.text = [NSString stringWithFormat:@"大約%@分鐘", checkModel.waitTime];

    self.numberWithCurrentLabel.topDataLabel.text = checkModel.lineNumber;

    self.numberWithCurrentLabel.buttomDataLabel.text = checkModel.currentNumber;

}

 

控制器-------------

- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    CheckCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];

    cell.checkModel = [self.dataSource objectAtIndex:indexPath.item];  //self.dataSource陣列儲存了checkModel

    

    return cell;

}