為了犒勞自己的學習內容,就山寨個微信的視圖控制吧。拿着微信,仔細的看了一下,主要用到了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 self.myData = [[NSMutableArray alloc] initWithCapacity:100]; 4 5 //往數組里添加字典 6 for (int i = 0; i < 100; i ++) { 7 //創建用戶 8 NSString *name = [NSString stringWithFormat:@"User%03d", i]; 9 NSString *number = [NSString stringWithFormat:@"12345%03d", i]; 10 11 //創建字典 12 NSDictionary *user = @{@"name":name, 13 @"number":number}; 14 15 //字典加入數組 16 [self.myData addObject:user]; 17 }
(2)返回我們sectionNumber,在這我們就寫一個分組吧,真正的數據是計算出來的
1 //在動態TableView中的分組數,有幾組返回幾 2 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 3 { 4 // Return the number of sections. 5 return 1; 6 }
(3)返回每個分組的行數,這里我們返回的時我們創建數組元素的個數
1 //每個分組中的行數,即為數組元素的個數 2 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 3 { 4 // Return the number of rows in the section. 5 return self.myData.count; 6 }
(4)給我們的cell賦數據,通過Cell的identifier來創建cell,獲取第幾條數據是通過回調參數indexPath的item來確定獲取第幾條數據
1 //創建cell 2 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 3 { 4 NSLog(@"獲取的第%03d個數據", indexPath.item);//請求測試 5 6 //通過我們的cell的類型創建相應的cell 7 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"number" forIndexPath:indexPath]; 8 9 // Configure the cell... 10 cell.textLabel.text = self.myData[indexPath.item][@"name"]; 11 cell.detailTextLabel.text = self.myData[indexPath.item][@"number"]; 12 return cell; 13 }
代碼說明:
動態的TableView就是為我們的大數據准備的,默認的事屏幕上顯示多少,就會請求多少數據。隨着屏幕的下拉,會請求要顯示的數據,上出屏幕的數據會被釋放掉。若想請求更多,我們需要用代碼實現,在以后的博客中會介紹,在這不做過多的介紹。動態請求數據如下:
靜態的TableView實現起來比較簡單,配置起來也比較簡單,在這不做贅述。上面的東西只是防微信的視圖框架,沒有給出具體的業務邏輯。要實現具體的業務邏輯,我們需要給每個ViewController關聯實體類,然后在每個類中實現我們對應的業務邏輯,這樣分析起來,微信的代碼量還是蠻大的。在以后的博客中會給出具體的業務邏輯實現,本篇博客先做一個引子吧。