參考了SKSTableView的設計思想,工程在github上,我由於沒有連接就不貼了git
思路1是用tableView的head做爲一級菜單,其餘都是每個section的全部cell,這種方法看起來很好數據是數據,標題是標題github
思路二是用TableView的每個section的row 0 作標題,其他的是數據,這種方法更爲簡單點,可是邏輯處理將會複雜一些spa
思路一通過一番實驗後發現,問題主要表如今如何讓headView響應點擊事件,因而將tableview的headview添加一個button,而後讓點擊時候設置當前的section的行數爲0;進而達到所須要的效果設計
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
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;}