當前位置:
首頁 > 最新 > 用代碼寫靜態表格

用代碼寫靜態表格

早期第一次接觸StoryBoard的時候,就被其中一個控制項吸引了,那就是靜態表格。通過可視界面,將tableview裡面的cell設置上不同的內容和屬性,就像在添加簡單的UIView一樣簡單。不同再去一個個寫tableview的delegate、dataSource的數據源設置,方便又簡單。歸結到底就是用最簡單的方式去寫UITableView,拋開他的delegate。

思路整理

首先需要通過代碼的方式來實現,同時需要有復用功能,將delegate改用block來實現。簡單的插入、刪除、修改功能都應該有。

實現

思路有了,實現起來就簡單了,為了更好的讓大家使用,我已經將其push到github上。大家可以通過pod方式來添加:

pod "YStaticContentTableView"

示例

添加section和cell

這個一個添加section和cell到你的UITableView上的簡單例子,需要把你的代碼寫在控制器的,viewDidLoad方法里。把tableView開啟靜態表格模式[self.tableView enableStaticTableView],

這裡你可能需要引入頭文件YStaticContentTableView.h。你可以和平時一樣配置UITableViewCell,當然我們也提供YStaticContentTableViewCell對象來設置Cell的樣式和復用ID。

YStaticContentTableViewSection允許你來設置諸如Section標題等。

正如你看到的我們還有一個不錯的whenSelectedblock,這允許去寫一些代碼當我們點擊cell時去運行,一個好的例子比如:push 一個 UIViewController

- (void)viewDidLoad { [super viewDidLoad]; [self.tableView enableStaticTableView]; __weak typeof(self) weakSelf = self; [self.tableView addSection:^(YStaticContentTableViewSection *section, NSUInteger sectionIndex) { [section addCell:^(YStaticContentTableViewCell *staticContentCell, UITableViewCell *cell, NSIndexPath *indexPath) { staticContentCell.reuseIdentifier = @"UIControlCell"; staticContentCell.tableViewCellSubclass = [YCustomCell class]; YCustomCell *customCell = (YCustomCell *)cell; [customCell.btn setTitle:[NSString stringWithFormat:@"cell - %zd",i] forState:UIControlStateNormal]; [customCell.btn addTarget:weakSelf action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside]; [customCell.btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; } whenSelected:^(NSIndexPath *indexPath) { [[[UIAlertView alloc] initWithTitle:@"提示" message:[NSString stringWithFormat:@"click - %zd",indexPath.row] delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil] show]; [weakSelf.tableView deselectRowAtIndexPath:indexPath animated:YES]; }]; }]; }

運行時,插入一個Cell

這個行為就像addCell:除了這些,你還可以加上是否需要動畫的設置

[self.tableView insertCell:^(YStaticContentTableViewCell *staticContentCell, UITableViewCell *cell, NSIndexPath *indexPath) { //config cell } whenSelected:^(NSIndexPath *indexPath) { //TODO } atIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES];

運行時,插入多個Cell

和上面一樣,除了這些我們需要把我們的代碼放在beginUpdates和endUpdates,然後保留我們所有UITableView的構建方式,而且還是使用不錯,方便的語法。

[self.tableView beginUpdates]; for (NSInteger i = 0; i

總結

通過這種方式實現UITableView,會發現代碼更易理解和維護了。

其它

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 推酷 的精彩文章:

如何設計合理友好的錯誤提示?
Spring boot學習
perseus:基於 Mybatis+Spring 的讀寫分離方案
深度學習思考
This 帶來的困惑

TAG:推酷 |

您可能感興趣

靜態哈夫曼編碼的快速硬體實現
如何使用靜態分析優化Unity代碼?
靜態、寫實,西班牙人體油畫
如何即時設置一個靜態文件伺服器
靜態插畫設計
為什麼靜態方法不能調用非靜態的變數和方法
靜態路由與默認路由的配置
靜態、寫實,西班牙絕美人體油畫!
他曾用靜態圖像勾勒電影之魅
想預防扭傷提升健身效果,則要了解動態和靜態拉伸的運用技巧
錘鍊!簡單的靜態核心基本練習
動態念佛修智慧,靜態念佛證三昧
靜態模型與動漫科幻模型製作+讓書寫變得簡單快捷—李曉峰硬筆書法講座(三) 精彩預告
微服務架構下靜態數據通用緩存機制
商戶靜態碼收款限額調整通知
靜態人物速寫 坐著的男孩
盆景作為一種靜態藝術形象,能發揮無限的藝術想像空間,欣賞盆景
沈月對「靜態照騙」進行回應,網友:那不叫靜態,叫修圖過狠的硬照!
URL為什麼要靜態化或者偽靜態化?
本以為鞠婧禕跳舞身材會很好,當側面照曝光,才發現她只適合靜態