為了犒勞自己的學習內容,就山寨個微信的檢視控制吧。拿著微信,仔細的看了一下,主要用到了TabBarController以及配置TabBarItem, NavigationController以及配置NavigationBarItem, 還用到了我們比較複雜的TableViewController來顯示我們的資料。在用到TableView中既有靜態的TableView,也有動態的TableView。動態的TableView主要用來顯示我們的資料,而靜態的TableView主要用來顯示功能模組導航時使用。在用到靜態TableView時我們還用到啦分組的和未分組的cell。
1.下面是我們主要的檢視框架,需要時我們會給對應的Controller關聯相應的程式碼,實現我們的業務邏輯。檢視框架如下:
2.Project最終執行的介面如下,下面帶箭頭的Cell點進去是一個ViewController,下面的圖片都是在網上找得素材,第一個頁面裡面是放的動態的TableView,裡面的資料是模擬網路請求過來的動態資料:
3.不能只貼圖片對吧,寫程式是少不了程式碼的,從第一個頁面入手,如何動態載入我們的TableView. 在進行編碼之前,首先得配置我們的cell模板,在我們動態TableView中用到幾種Cell,我們就配置幾種cell模板,在配置cell模板時要設定每個cell的identifier,便於在程式碼中根據不同的資料來選擇我們資料對應的cell。我們的TableView的控制類要繼承於我們的UITableViewController類。下面是往我們動態TableView中的cell新增資料
(1)在我們相應的TableViewController類中建立我們的測試資料,來模擬網路請求。建立一個可變陣列,往可變陣列中存入100個字典,字典裡模擬使用者資訊。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/初始化資料 self.myData = [[NSMutableArray alloc] initWithCapacity:100]; //往陣列裡新增字典 for (int i = 0; i 100; i ++) { //建立使用者 NSString *name = [NSString stringWithFormat:@"User%03d", i]; NSString *number = [NSString stringWithFormat:@"12345%03d", i]; //建立字典 NSDictionary *user = @{@"name":name, @"number":number}; //字典加入陣列 [self.myData addObject:user]; } |
(2)返回我們sectionNumber,在這我們就寫一個分組吧,真正的資料是計算出來的
1 2 3 4 5 6 |
//在動態TableView中的分組數,有幾組返回幾 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } |
(3)返回每個分組的行數,這裡我們返回的時我們建立陣列元素的個數
1 2 3 4 5 6 |
//每個分組中的行數,即為陣列元素的個數 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return self.myData.count; } |
(4)給我們的cell賦資料,通過Cell的identifier來建立cell,獲取第幾條資料是通過回撥引數indexPath的item來確定獲取第幾條資料
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//建立cell - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"獲取的第%03d個資料", indexPath.item);//請求測試 //通過我們的cell的型別建立相應的cell UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"number" forIndexPath:indexPath]; // Configure the cell... cell.textLabel.text = self.myData[indexPath.item][@"name"]; cell.detailTextLabel.text = self.myData[indexPath.item][@"number"]; return cell; } |
程式碼說明:
動態的TableView就是為我們的大資料準備的,預設的事螢幕上顯示多少,就會請求多少資料。隨著螢幕的下拉,會請求要顯示的資料,上出螢幕的資料會被釋放掉。若想請求更多,我們需要用程式碼實現,在以後的部落格中會介紹,在這不做過多的介紹。動態請求資料如下:
靜態的TableView實現起來比較簡單,配置起來也比較簡單,在這不做贅述。上面的東西只是防微信的檢視框架,沒有給出具體的業務邏輯。要實現具體的業務邏輯,我們需要給每個ViewController關聯實體類,然後在每個類中實現我們對應的業務邏輯,這樣分析起來,微信的程式碼量還是蠻大的。在以後的部落格中會給出具體的業務邏輯實現,本篇部落格先做一個引子吧。
打賞支援我寫出更多好文章,謝謝!
打賞作者
打賞支援我寫出更多好文章,謝謝!