iOS tableView 下拉列表的設計

參考了SKSTableView的設計思想,工程在github上,我由於沒有連接就不貼了git

想要作成下邊的效果

有兩種思路

思路1是用tableView的head做爲一級菜單,其餘都是每個section的全部cell,這種方法看起來很好數據是數據,標題是標題github

思路二是用TableView的每個section的row 0 作標題,其他的是數據,這種方法更爲簡單點,可是邏輯處理將會複雜一些spa

思路一通過一番實驗後發現,問題主要表如今如何讓headView響應點擊事件,因而將tableview的headview添加一個button,而後讓點擊時候設置當前的section的行數爲0;進而達到所須要的效果設計

重點介紹一下思路二,並貼上一些代碼,由於思路二能夠在沒有二級菜單的時候能夠方便的響應cell點擊事件

設置了一個顯示隱藏的狀態變量_open和記錄最後一次點擊section的變量_lastOpen

BOOL _open;
NSInteger _lastOpen;
代理

_datasouth = [[NSMutableArray alloc] initWithArray:@[@[@"miao", @"miao1",@"miao12"],
                   @[@"nong", @"nong1", @"nong12", @"Rnong13", @"nong14", @"nong15", @"nong16", @"Rnong17"],
                   @[@"fei", @"fei1",@"fei1"],
                   @[@"lei"],
                   @[@"wu"]]];
事件

設置代理

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return _datasouth.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (_open == 0) {
        return 1;
    }
    if (_lastOpen == section) {
        NSArray * arr = _datasouth[section];
        return arr.count;
    }
    return 1;
}
it

對cell自定義

 if (indexPath.row == 0) {io

//組名cell
table

        if ([_datasouth[indexPath.section] count] == 1) {
            //無分組的cell自定義
ast

            //等同於底層cell,執行跳轉?

        }
    } else {
        //底層cell,執行跳轉?
    }

選中的方法的邏輯

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 0 && [_datasouth[indexPath.section] count] == 1) {
        //跳轉;
        return;
    }
    if (_open == 0) {
        if (indexPath.row == 0) {
            _open = 1;
            _lastOpen = indexPath.section;
        }
    } else {
        if (indexPath.row == 0) {
            if (_lastOpen == indexPath.section) {
                _open = 0;
                _lastOpen = -1;
            }
            _lastOpen = indexPath.section;
        }
    }
    [_tableView reloadData];
    //[_tableView reloadSections:[NSIndexSet indexSetWithIndex:_lastOpen] withRowAnimation:UITableViewRowAnimationAutomatic];
    if (indexPath.row != 0) {
       //跳轉
    }
}

其餘的頭尾視圖設置(可不設置)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {    if (indexPath.row == 0) {        return 40;    };    return 70;}- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {    return .01;}- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {    UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 5)];    return view;}

相關文章
相關標籤/搜索