早期第一次接觸StoryBoard的時(shí)候,就被其中一個(gè)控件吸引了,那就是靜態(tài)表格。通過可視界面瑞佩,將tableview里面的cell設(shè)置上不同的內(nèi)容和屬性,就像在添加簡單的UIView一樣簡單饲齐。不同再去一個(gè)個(gè)寫tableview的delegate钉凌、dataSource的數(shù)據(jù)源設(shè)置,方便又簡單捂人。歸結(jié)到底就是用最簡單的方式去寫UITableView御雕,拋開他的delegate。
思路整理
首先需要通過代碼的方式來實(shí)現(xiàn)滥搭,同時(shí)需要有復(fù)用功能酸纲,將delegate改用block來實(shí)現(xiàn)。簡單的插入瑟匆、刪除闽坡、修改功能都應(yīng)該有。
實(shí)現(xiàn)
思路有了愁溜,實(shí)現(xiàn)起來就簡單了疾嗅,為了更好的讓大家使用,我已經(jīng)將其push到github上冕象。大家可以通過pod方式來添加:
pod "YStaticContentTableView"
示例
添加section和cell
這個(gè)一個(gè)添加section和cell到你的UITableView上的簡單例子代承,需要把你的代碼寫在控制器的,viewDidLoad
方法里渐扮。把tableView開啟靜態(tài)表格模式[self.tableView enableStaticTableView]
,
這里你可能需要引入頭文件YStaticContentTableView.h
论悴。你可以和平時(shí)一樣配置UITableViewCell
掖棉,當(dāng)然我們也提供YStaticContentTableViewCell
對(duì)象來設(shè)置Cell的樣式和復(fù)用ID。
YStaticContentTableViewSection
允許你來設(shè)置諸如Section標(biāo)題等膀估。
正如你看到的我們還有一個(gè)不錯(cuò)的whenSelected
block幔亥,這允許去寫一些代碼當(dāng)我們點(diǎn)擊cell時(shí)去運(yùn)行,一個(gè)好的例子比如:push 一個(gè) 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];
}];
}];
}
運(yùn)行時(shí)察纯,插入一個(gè)Cell
這個(gè)行為就像addCell:
除了這些帕棉,你還可以加上是否需要?jiǎng)赢嫷脑O(shè)置
[self.tableView insertCell:^(YStaticContentTableViewCell *staticContentCell, UITableViewCell *cell, NSIndexPath *indexPath) {
//config cell
} whenSelected:^(NSIndexPath *indexPath) {
//TODO
} atIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES];
運(yùn)行時(shí),插入多個(gè)Cell
和上面一樣捐寥,除了這些我們需要把我們的代碼放在beginUpdates
和endUpdates
,然后保留我們所有UITableView
的構(gòu)建方式笤昨,而且還是使用不錯(cuò),方便的語法握恳。
[self.tableView beginUpdates];
for (NSInteger i = 0; i < 99; i++) {
[self.tableView insertCell:^(YStaticContentTableViewCell *staticContentCell, UITableViewCell *cell, NSIndexPath *indexPath) {
//config cell
} whenSelected:^(NSIndexPath *indexPath) {
//TODO
} atIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES];
}
[self.tableView endUpdates];
總結(jié)
通過這種方式實(shí)現(xiàn)UITableView,會(huì)發(fā)現(xiàn)代碼更易理解和維護(hù)了捺僻,
其它
github: https://github.com/LiZunYuan/YStaticContentTableView