十年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開(kāi)發(fā)_APP開(kāi)發(fā),低調(diào)、敢創(chuàng)新、有情懷!
      南昌百恒網(wǎng)絡(luò)微信公眾號(hào) 掃一掃關(guān)注
      小程序
      tel-icon全國(guó)服務(wù)熱線:400-680-9298,0791-88117053
      掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
      掃一掃打開(kāi)百恒網(wǎng)絡(luò)微信小程序

      百恒網(wǎng)絡(luò)

      南昌百恒網(wǎng)絡(luò)

      IOS軟件開(kāi)發(fā)之下拉刷新控件功能的實(shí)現(xiàn)方法

      百恒網(wǎng)絡(luò) 2017-08-14 5665

      隨著下拉刷新模式的影響力越來(lái)越大,蘋果不得不考慮把它列入自己的規(guī)范之中,并在iOS 6 API中推出了下 拉刷新控件。圖1所示的是iOS 6中的下拉刷新,有點(diǎn)像是在拉“膠皮糖”,當(dāng)這個(gè)“膠皮糖”拉斷時(shí),就會(huì)出現(xiàn)活動(dòng)指示器。圖2所示的是iOS 7之后中的下拉刷新,iOS 7之后提倡扁平化設(shè)計(jì),這里的下拉動(dòng)畫效果變成了活動(dòng)指示器,而不是“膠皮糖”。

      iOS 6的下拉刷新

      iOS 6的下拉刷新

      iOS 7的下拉刷新

      iOS 7的下拉刷新

      在iOS 6之后,UITableViewController添加了一個(gè)refreshControl屬性,這個(gè)屬性保持了UIRefreshControl的 一個(gè)對(duì)象指針。UIRefreshControl就是iOS 6為表視圖實(shí)現(xiàn)下拉刷新而提供的類,目前該類只能應(yīng)用于表視圖界面。 UIRefreshControl的refreshControl屬性與UITableViewController配合使用,關(guān)于下拉刷新布局等問(wèn)題可以不必考慮,UITableViewController會(huì)將其自動(dòng)放置于表視圖中。

      下面南昌APP制作開(kāi)發(fā)公司-百恒網(wǎng)絡(luò)就通過(guò)一個(gè)例子來(lái)讓大家了解一下UIRefreshControl控件的用法。先來(lái)看看視圖控制器ViewController的定義和屬性,以及視圖加載方法viewDidLoad的相關(guān)代碼:

      class ViewController: UITableViewController {

      var Logs : NSMutableArray!

      override func viewDidLoad() {

      super.viewDidLoad()

      //初始化變量和時(shí)間

      self.Logs = NSMutableArray()

      var date = NSDate()

      self.Logs.addObject(date)

      //初始化UIRefreshControl

      var rc = UIRefreshControl() ①

      rc.attributedTitle = NSAttributedString(string: "下拉刷新") ②

      rc.addTarget(self, action: "refreshTableView",

      forControlEvents: UIControlEvents.ValueChanged) ③

      self.refreshControl = rc

      }

      }

      #import "ViewController.h"

      @interface ViewController ()

      @property (nonatomic,strong) NSMutableArray* Logs;

      @end

      @implementation ViewController

      - (void)viewDidLoad

      {

      [super viewDidLoad];

      //初始化變量和時(shí)間

      self.Logs = [[NSMutableArray alloc] init];

      NSDate *date = [[NSDate alloc] init];

      [self.Logs addObject:date];

      //初始化UIRefreshControl

      UIRefreshControl *rc = [[UIRefreshControl alloc] init]; ①

      rc.attributedTitle = [[NSAttributedString alloc]initWithString:

      @"下拉刷新"]; ②

      [rc addTarget:self action:@selector(refreshTableView)

      forControlEvents:UIControlEventValueChanged]; ③

      self.refreshControl = rc;

      }

      上述代碼中,Logs屬性存放了NSDate日期列表,用于在表視圖中顯示需要的數(shù)據(jù)。在viewDidLoad方法,我們初始化了當(dāng)前時(shí)間的一條模擬數(shù)據(jù)。第①行代碼用于創(chuàng)建UIRefreshControl對(duì)象。第②行代碼用于設(shè)置 UIRefreshControl對(duì)象的attributedTitle屬性,它是用于顯示下拉控件的標(biāo)題。第③行代碼通過(guò)編程方式為 UIRefreshControl控件添加UIControlEvents.ValueChanged(Objective-C中是UIControlEvent.ValueChanged)事件處理方法。refreshTableView是該事件的處理方法,相關(guān)代碼如下:

      func refreshTableView() {

      if (self.refreshControl?.refreshing == true) {

      self.refreshControl?.attributedTitle = NSAttributedString(string:"加載中...") ①

      //添加新的模擬數(shù)據(jù)

      var date = NSDate()

      self.Logs.addObject(date)

      self.refreshControl?.endRefreshing() ②

      self.refreshControl?.attributedTitle = NSAttributedString(string:"下拉刷新") ③

      self.tableView.reloadData() ④

      }

      }

      -(void) refreshTableView

      {

      if (self.refreshControl.refreshing) {

      self.refreshControl.attributedTitle

      = [[NSAttributedString alloc]initWithString:@"加載中..."]; ①

      //添加新的模擬數(shù)據(jù)

      NSDate *date = [[NSDate alloc] init];

      [self.Logs addObject:date];

      [self.refreshControl endRefreshing]; ②

      self.refreshControl.attributedTitle

      = [[NSAttributedString alloc]initWithString:@"下拉刷新"]; ③

      [self.tableView reloadData]; ④

      }

      }

      UIRefreshControl的refreshing屬性可以判斷控件是否處于刷新?tīng)顟B(tài),刷新?tīng)顟B(tài)的圖標(biāo)是我們常見(jiàn)的活動(dòng)指示器。第①行代碼用于將顯示標(biāo)題設(shè)置為“加載中...”。

      此外,南昌APP制作開(kāi)發(fā)公司-百恒網(wǎng)絡(luò)想告訴大家的是,在刷新操作完成的時(shí)候,endRefreshing方法可以停止下拉刷新控件,回到初始狀態(tài),顯示的標(biāo)題文本為“下拉刷新”,見(jiàn)第②行和第③行代碼。第③行代碼用于重新設(shè)置下拉刷新控件的標(biāo)題,然后再通過(guò)第④行語(yǔ)句重新加載表視圖。

      實(shí)現(xiàn)UITableViewDataSource的方法的代碼如下:

      override func tableView(tableView: UITableView,

      numberOfRowsInSection section: Int) -> Int {

      return self.Logs.count

      }

      override func tableView(tableView: UITableView,

      cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

      let cellIdentifier = "CellIdentifier"

      var cell:UITableViewCell! = tableView

      .dequeueReusableCellWithIdentifier(cellIdentifier)

      as? UITableViewCell

      if (cell == nil) {

      cell = UITableViewCell(style: UITableViewCellStyle.Default,

      reuseIdentifier:cellIdentifier)

      }

      var dateFormatter : NSDateFormatter = NSDateFormatter()

      dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss zzz"

      var theDate = self.Logs[indexPath.row] as NSDate

      cell.textLabel?.text = dateFormatter.stringFromDate(theDate)

      cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator

      return cell

      }

      - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

      return 1;

      }

      - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:

      (NSInteger)section {

      return [self.Logs count];

      }

      - (UITableViewCell *)tableView:(UITableView *)tableView

      cellForRowAtIndexPath:(NSIndexPath *)indexPath {

      static NSString *CellIdentifier = @"Cell";

      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:

      CellIdentifier];

      if (cell == nil) {

      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1

      reuseIdentifier:CellIdentifier];

      }

      NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];

      [dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"];

      cell.textLabel.text = [dateFormat stringFromDate: [self.Logs

      objectAtIndex:[indexPath row]]];

      cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

      return cell;

      }

      最后運(yùn)行一下,看看效果即可。

      在南昌APP開(kāi)發(fā)中,應(yīng)用能夠?qū)崿F(xiàn)用戶需求的前提下,良好的用戶體檢是我們更高的追求,因?yàn)槲覀兊漠a(chǎn)品不僅僅是具備某種功能的工具,更是一件藝術(shù)品,是我們心、智、力的結(jié)晶。

      關(guān)于在IOS軟件開(kāi)發(fā)中下拉刷新控件功能的實(shí)現(xiàn)方法就已經(jīng)講完了,如果大家還有哪些不太明白的地方可隨時(shí)來(lái)電和我們聯(lián)系。此外,了解更多關(guān)于APP開(kāi)發(fā)的相關(guān)知識(shí),歡迎訪問(wèn)公司官網(wǎng)。


      400-680-9298,0791-88117053
      掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
      掃一掃打開(kāi)百恒網(wǎng)絡(luò)小程序

      歡迎您的光顧,我們將竭誠(chéng)為您服務(wù)×

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務(wù) 售后服務(wù)
       
      售后服務(wù) 售后服務(wù)
       
      備案專線 備案專線
       
      ×
      国产精品一区二区四区| 久久精品国产亚洲αv忘忧草 | 国产精品美女免费视频观看| 日韩精品一区二三区中文| 麻豆精品人妻一区二区三区蜜桃| 久久精品国产亚洲αv忘忧草| 日韩精品内射视频免费观看| 久久精品国产精品| 国产精品无套内射迪丽热巴| 精品国产91久久久久久久a| 日韩AV在线不卡一区二区三区| 日韩精品电影一区| 久久久无码精品亚洲日韩按摩| 三级精品在线观看| 国产精品丝袜久久久久久不卡| 免费视频精品一区二区| 亚洲日韩中文字幕一区| 国语自产精品视频在线第| 亚洲区日韩精品中文字幕| 国产精品免费观看| 麻豆aⅴ精品无码一区二区| 亚洲国产综合精品中文第一区| 久久精品国产成人AV| 国产AV国片精品| 久久精品国产清白在天天线| 国产精品久久久亚洲| 国产成人精品AA毛片| 国产精品对白交换视频| 日韩精品成人一区二区三区| 久久亚洲精品中文字幕三区| 国产精品熟女一区二区| 亚洲国产精品一区二区第一页 | 亚洲视频精品在线观看| ...91久久精品一区二区三区| 91精品久久久久久久久网影视| 69精品久久久久| 国产成人精品男人的天堂538| 国产精品国产三级国产专播| 国产主播精品在线| 人妻少妇精品视频三区二区一区| 午夜人屠h精品全集|