同時使用多個UITableView

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;
}
相關文章
相關標籤/搜索