亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS開發那些事-表視圖UI設計模式

發布時間:2020-06-30 17:05:28 來源:網絡 閱讀:735 作者:tony關東升 欄目:移動開發

軟件設計中有設計模式,在UI設計方面也有設計模式。由于表視圖的應用在iOS中極其廣泛,本節向大家介紹表視圖中兩個UI設計模式:分頁模式和下拉刷新(Pull-to-Refresh)模式。這兩種模式已經成為移動平臺開發的標準。

 

分頁模式

iOS開發那些事-表視圖UI設計模式

        分頁模式規范了移動平臺進行大量數據請求的處理方式 。

下拉刷新模式

下拉刷新(Pull-to-Refresh)是重新刷新表視圖或列表,重新加載數據,這種模式廣泛用于移動平臺。下拉刷新與分頁相反,當翻動屏幕到 頂部時候,再往下拉屏幕程序就開始重新請求數據,表視圖表頭部分會出現等待指示器,請求結束表視圖表頭消失。下拉刷新模式帶有箭頭動畫效果。

 iOS開發那些事-表視圖UI設計模式

       在很多開源社區中都有下拉刷新的實現代碼,Github上的git://github.com/leah/PullToRefresh.git有一個下拉刷新的例子,可以供大家參考。

iOS6下拉刷新控件

隨著下拉刷新模式影響力的越來越大,蘋果不得不考慮把它列入自己的規范之中,并在iOS 6 API中推出了下拉刷新控件。iOS 6中的下拉刷新,有點像是在拉一個“膠皮糖”,當這個“膠皮糖”拉斷的時候之后會出現等待指示器。

 iOS開發那些事-表視圖UI設計模式

       iOS 6 之后UITableViewController添加了一個refreshControl屬性,這個屬性保持了一個UIRefreshControl的對 象指針。UIRefreshControl就是iOS 6為表視圖實現下拉刷新而提供的。UIRefreshControl類目前只能應用于表視圖畫面,其它視圖不能使用。該屬性與 UITableViewController配合使用,關于下拉刷新布局等問題可以不必考慮,UITableViewController會將其自動放置 于表視圖中。

我們通過一個例子來了解一下UIRefreshControl控件的使用。參考創建簡單表視圖的案例,創建工程“RefreshControlSample”,然后修改代碼ViewController.h。

 

  1. #import <UIKit/UIKit.h> 
  2.  
  3. @interface ViewController : UITableViewController 
  4.  
  5. @property (nonatomic,strong) NSMutableArray* Logs; 
  6.  
  7. @end 

Logs屬性存放了NDate日期列表,用于在表視圖中顯示需要的數據,ViewController.m中的初始化代碼如下:

 

  1. - (void)viewDidLoad 
  2.  
  3.  
  4. [super viewDidLoad]; 
  5.  
  6. //初始化變量和時間 
  7.  
  8. self.Logs = [[NSMutableArray alloc] init]; 
  9.  
  10. NSDate *date = [[NSDate alloc] init]; 
  11.  
  12. [self.Logs addObject:date]; 
  13.  
  14. //初始化UIRefreshControl 
  15.  
  16. UIRefreshControl *rc = [[UIRefreshControl alloc] init]; 
  17.  
  18. rc.attributedTitle = [[NSAttributedString alloc]initWithString:@”下拉刷新”]; 
  19.  
  20. [rc addTarget:self action:@selector(refreshTableView) forControlEvents:UIControlEventValueChanged]; 
  21.  
  22. self.refreshControl = rc; 
  23.  

viewDidLoad方法中初始化了一條當前時間的模擬數據。UIRefreshControl的構造方式是init。 attributedTitle屬性用于下拉控件顯示標題文本。UIRefreshControl的addTarget: forControlEvents:方法能夠通過編程方式為UIControlEventValueChanged事件添加處理方法。 refreshTableView是UIControlEventValueChanged事件的處理方法,refreshTableView方法的代碼 如下:

 

  1. -(void) refreshTableView 
  2.  
  3.  
  4. if (self.refreshControl.refreshing) { 
  5.  
  6. self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@”加載中…”]; 
  7.  
  8. //添加新的模擬數據 
  9.  
  10. NSDate *date = [[NSDate alloc] init]; 
  11.  
  12. //模擬請求完成之后,回調方法callBackMethod 
  13.  
  14. [self performSelector:@selector(callBackMethod:) withObject:date afterDelay:3]; 
  15.  
  16.  

UIRefreshControl的refreshing屬性可以判斷控件是否還處于刷新中的狀態,刷新中狀態的圖標是我們常見的等待指示器,在這 個階段要將顯示標題文本設置為“加載中…”。接下來應該是進行網絡請求或者數據庫查詢的操作。這些操作完成后應用會回調callBackMethod方 法,本案例涉及云端的技術,我們使用[self performSelector:@selector(callBackMethod:) withObject:date afterDelay:3]語句延時調用callBackMethod方法來模擬實現。

回調方法callBackMethod:的代碼如下。

 

  1. -(void)callBackMethod:(id) obj 
  2.  
  3.  
  4. [self.refreshControl endRefreshing]; 
  5.  
  6. self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@”下拉刷新”]; 
  7.  
  8. [self.Logs addObject:(NSDate*)obj]; 
  9.  
  10. [self.tableView reloadData]; 
  11.  

在請求完成的時候endRefreshing方法可以停止下拉刷新控件,回到初始狀態,顯示的標題文本為“下拉刷新”。[self.tableView reloadData]語句是重新加載表視圖。

實現UITableViewDataSource的兩個方法代碼如下:

 

  1. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
  2.  
  3. return 1; 
  4.  
  5.  
  6. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
  7.  
  8. return [self.Logs count]; 
  9.  
  10.  
  11. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
  12.  
  13. static NSString *CellIdentifier = @”Cell”; 
  14.  
  15. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
  16.  
  17. if (cell == nil) { 
  18.  
  19. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; 
  20.  
  21.  
  22. NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
  23.  
  24. [dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"]; 
  25.  
  26. cell.textLabel.text = [dateFormat stringFromDate: [self.Logs objectAtIndex:[indexPath row]]]; 
  27.  
  28. cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
  29.  
  30. return cell; 
  31.  
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

秭归县| 布尔津县| 凤翔县| 营口市| 抚宁县| 洛扎县| 仙桃市| 杭州市| 成安县| 南漳县| 林芝县| 朝阳市| 方城县| 古浪县| 翼城县| 三门县| 柳州市| 金昌市| 安远县| 三明市| 鹰潭市| 珲春市| 大足县| 新泰市| 塔河县| 贺兰县| 泾阳县| 龙川县| 灯塔市| 江孜县| 兴和县| 曲松县| 阳曲县| 鲁甸县| 孝感市| 赞皇县| 即墨市| 抚宁县| 涟水县| 嘉黎县| 城步|