華山論劍之iOS&tableView的雙劍合璧
阿新 • • 發佈:2019-01-31
示意圖對待生活,你用什麼的態度對待它,它就會以什麼的態度回報你,那麼請善待你的生活.
上面的這張圖 我相信大家都不會陌生,因為這就是一張外賣App的一張圖,左邊一欄是"壽司,小菜,其他,就睡,套餐"右邊怎麼具體的詳情實物列表,如果我們需要做出這樣的效果,設計的思路是怎麼樣的?
其實這就是一個控制器中如何展現兩個tableView的問題的具體化,我們都知道通常情況下,一個控制器只能有一個tableView,因為一個控制器只能實現一個數據源方法.下面有兩種解決方案.具體使用哪一種,根據實際情況而定.
- 如果需要一個控制器中含有兩個tableView,我們可以先建立兩個控制器,每一個控制器新增上一個tableView,並且新增tableView的代理方法和資料來源方法.然後把兩個帶有tableView的控制器使用addSubView,新增到主控制器對應的顯示位置就可以了,當然了,這種方法理解起來很簡單,但是比較麻煩,如果我們需要的tableView過多,那麼我們的程式碼量增加的可不是一點半點.
- 2.第二種方法就是本篇博文所講的方法,既然,一個控制器中只能新增一個數據源方法,那麼我們在資料來源方法中新增一個判斷,判斷是哪一個tableView的資料來源就可以了,相比於上面的一個解決方案,程式碼量大大的減少,而且易於維護.
那麼,我們看一下,具體程式碼是如何實現的吧,程式碼的實現很簡單,首先我們需要創建出兩個全域性的tableView,然後在資料來源進行判斷是從哪一個tableView進入資料來源方法,根據進入的不同載入不同的資料來源就可以了.
@interface ViewController () { UITableView *leftTableView; UITableView *rightTableView; } @end #pragma - mark ----- TableView Datasouce ---- -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ if ([tableView isEqual:leftTableView]) { return 14; } else if ([tableView isEqual:rightTableView]) { return 10; } return 0; } -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ if ([tableView isEqual:leftTableView]) { static NSString *identifier = @"myCell"; LeftCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[LeftCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } return cell; } else if ([tableView isEqual:rightTableView]) { static NSString *identifier = @"mycell"; RightCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[RightCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } return cell; } return nil; }