1. 程式人生 > >華山論劍之iOS&tableView的雙劍合璧

華山論劍之iOS&tableView的雙劍合璧

對待生活,你用什麼的態度對待它,它就會以什麼的態度回報你,那麼請善待你的生活.

1396375-23e25215da1eb603.png 示意圖

上面的這張圖 我相信大家都不會陌生,因為這就是一張外賣App的一張圖,左邊一欄是"壽司,小菜,其他,就睡,套餐"右邊怎麼具體的詳情實物列表,如果我們需要做出這樣的效果,設計的思路是怎麼樣的?

其實這就是一個控制器中如何展現兩個tableView的問題的具體化,我們都知道通常情況下,一個控制器只能有一個tableView,因為一個控制器只能實現一個數據源方法.下面有兩種解決方案.具體使用哪一種,根據實際情況而定.

    1. 如果需要一個控制器中含有兩個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;
}