你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> WAMSimpleDataSource,更優雅的編寫靜態UITableView

WAMSimpleDataSource,更優雅的編寫靜態UITableView

編輯:IOS開發綜合

嘛,開端之前先雙手奉上Github項目地址,歡送各位大佬star:
https://github.com/WAMaker/WA...

置信做IOS開發的小同伴們常常會遇到這樣的頁面:

WAMSimpleDataSource,更優雅的編寫靜態UITableView
WAMSimpleDataSource,更優雅的編寫靜態UITableView

關於這樣的靜態列表我們可以直接用 storyboard 拖一個出來,或許直接用代碼創立。我團體的話會選擇用代碼直接創立,但是之前不斷有的問題是沒有較好的數據源表示方式,需求對 indexPath 停止硬編碼,這招致了在 tableView 的代理外面需求停止判別:

if (indexPath.section == 0) {
    if (indexPath.row == 0) { // email
        // do something
    } else if (indexPath.row == 1) { // phone
        // do something
    }
} else if (indexPath.section == 1) {
    // do something
}

略微好點的會在相關的判別邊上做正文,但是這樣寫仍然容易在往後(產品)調整順序時調整了一個中央而遺忘另外的,總的來說就是代碼不夠優雅。基於這樣的背景,在嘗試了各種方式之後,發生了一個可行的處理方案 —— WAMSimpleDataSource。

設計思緒

在定義 WAMCellInfoWAMSectionInfo 兩個類時我選擇引入別名( alias )來處理 indexPath 的硬編碼問題(能夠有人會說alias也是硬編碼,但這樣做提升了代碼的可讀性=0=)。

WAMCellInfo

WAMCellInfo 為 cell 的創立提供了最根本的信息,如 reuseIdentifier ,title,detail。用戶也能傳入自定義的 cell 而不用擔憂循環援用的問題。

WAMSectionInfo

WAMSectionInfo 作為 WAMCellInfo 的容器,提供了添加,刪除,交換,以及基於 alias 對 WAMCellInfoWAMCellInfo 的索引辦法。

WAMDataSource

WAMDataSource 是一切 WAMSectionInfo 的容器,異樣提供了添加,刪除,交換,以及基於 alias 對 WAMSectionInfo 的索引辦法。

Demo

讓我們就以一個復雜的 demo 看下 WAMSimpleDataSource 在靜態列表中如何能讓代碼看起來更簡約。

static NSString *const kReuseIdentifier     = @"tableViewCellIdentifier";
static NSString *const kIdentifierCellAlias = @"kIdentifierCellAlias";
static NSString *const kSelfDefineCellAlias = @"kSelfDefineCellAlias";

static NSString *const kSectionZeroAlias = @"kSectionZeroAlias";
static NSString *const kSectionOneAlias  = @"kSectionOneAlias";

#pragma mark - Initialization

// section info初始化
WAMSectionInfo *zero = [WAMSectionInfo infoWithCellInfos:@[] alias:kSectionZeroAlias];
// 添加操作,cell info初始化
[zero appendingCellInfo:[WAMCellInfo infoWithSelfDefineCell:self.customizedCell alias:kSelfDefineCellAlias]];

WAMSectionInfo *one = [WAMSectionInfo infoWithCellInfos:@[
        [WAMCellInfo infoWithReuseIdentifier:kReuseIdentifier title:nil detail:nil alias:kIdentifierCellAlias]
    ] alias:@"oneSectionAlias"];

// data source初始化
self.dataSource = [WAMDataSource dataSourceWithSectionInfos:@[zero, one]];

#pragma mark - UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return self.dataSource.sectionInfos.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.dataSource.sectionInfos[section].cellInfos.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    WAMCellInfo *cellInfo = self.dataSource.sectionInfos[indexPath.section].cellInfos[indexPath.row];
    __kindof UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellInfo.identifier forIndexPath:indexPath];

    // 依據不同的alias停止不同的操作
    if ([cellInfo.alias isEqualToString:kSelfDefineCellAlias]) {
        // do something
    } else if ([[cellInfo.alias isEqualToString:kIdentifierCellAlias]) {
        // do something
    }
    .
    .
    .

    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return self.dataSource.sectionInfos[section].sectionHeaderHeight;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return self.dataSource.sectionInfos[section].sectionFooterHeight;
}
總結與缺陷

如今的 WAMDataSource 還沒方法做到直接作為 tableView 的數據源,這是在今後的更新中會處理的問題。雖然 WAMSimpleDataSource 並沒有增加很多代碼量,但能提升靜態列表中代碼的可讀性以及可維護性,團體覺得還是值得的。

希望各位會喜歡,有問題可以留言或許在 Github 上給我提 PR,十分感激。

GitHub repo:https://github.com/WAMaker/WA...

以上就是對WAMSimpleDataSource,更優雅的編寫靜態UITableView的相關引見,希望對您學習IOS有所協助,感激您關注本站!

【WAMSimpleDataSource,更優雅的編寫靜態UITableView】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved