1.xib\storyboard中給2個tableView設置constraints(等寬)
方法 :
①設置mainTableView的上\下\左\三部分的約束爲0;subTableView上\下\右\的約束爲0;
②同時選中mainTableView和subTableView,設置爲等寬和等高;
2.代理和數據源設置
mainTableView和subTableView的代理和數據源都爲該控制器
3.點擊如何處理
示例情景:一個模型A給tableView提供數據,且有個屬性爲數組,數組裏面存放着子模型B。mainTableView展現模型A的數據;subTableView展現模型B的數據。
方法:
#pragma mark - 數據源方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (tableView == self.mainTableView) { // 主表
return [存放主表的數組的個數];
} else { // 從表
return [存放從表的數組的個數];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = nil;
if (tableView == self.mainTableView) { // 主表
// 展現主表cell.textLable.text
// 根據數組屬性是否有值,判斷是否添加箭頭樣式(提醒用戶該主表存在從表數據)
if (subdata.count) {
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
} else { // 從表
// 展現從表cell.textLable.text,須要注意的是須要在cell點擊事件裏面標記當前選中的cell的下標,設置爲屬性。由於從表裏面展現的數據就是根據主表所選中的row實現的。
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == self.mainTableView) {
// 被點擊的數據
self.selectedMainRow = indexPath.row;
// 刷新右邊的數據(必須刷新)
[self.subTableView reloadData];
}
}
4.2個tableView在xib\storyboard中縮小的緣由(不單單是tableView,其餘控件往xib的View中添加也可能會出現)
分析爲何把xib中這2個tableView添加到控制器view上面,會消失:以下圖
緣由:storyboard或者xib中自動勾選了自動佈局的,若是把xib中的tableView加載到父控件的view上面,若是父控件的view的尺寸縮小,那麼xib中的tableView的大小也會跟隨者父控件的尺寸縮小而縮小,而且最後會縮小爲0。
致使的結果:
①致使view中不會顯示tableView
②tableView消失以後,不會調用tableView的代理方法
解決辦法:
- (void)awakeFromNib {
// autoresizingMask,該屬性默認爲none。若是xib/storyboard中設置了autolayout,那麼該屬性就會被打開。須要咱們本身手動關閉。
self.autoresizingMask = UIViewAutoresizingNone;
}