码迷,mamicode.com
首页 > 移动开发 > 详细

UI下拉刷新(IOS开发)

时间:2014-10-28 21:45:19      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:ios   ios开发   objective-c   uitableviewcell   下拉控件   

由于表应用有两个UI设计模式: 分页模式、下拉刷新模式。

其中下拉刷新被广泛应用(新浪微博,QQ)

这里吐槽一下QQ的墨迹,其实PC桌面的应用还好,及时的扁平化。但是IOS这么大的市场,但是现在都IOS8了,为什么还在用IOS6的下拉刷新的“胶皮糖”UI样式。

IOS6以后增加了一个UIRefreshControl的下拉刷新类,目前这个类只能应用于表视图界面。


在Xcode6中,还没有在故事版中增加下拉拖拽,类似label之类的控件。所以布局什么的不用太多考虑。


代码部分可重用,目前就当作一个库来用吧。


bubuko.com,布布扣


H文件:

#import <UIKit/UIKit.h>

@interface TableViewController : UITableViewController

@property (nonatomic, strong) NSMutableArray * Logs;

@end

M文件:

#import "ViewController.h"

@interface TableViewController ()

@end

@implementation TableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 初始化变量和时间
    self.Logs = [[NSMutableArray alloc] init];
    NSDate *date = [[NSDate alloc] init];
    [self.Logs addObject:date];
    
    // 初始化UIRefreshControl
    // rc为该控件的一个指针,只能用于表视图界面
    // 关于布局问题可以不用考虑,关于UITableViewController会将其自动放置于表视图中
    
    UIRefreshControl *rc = [[UIRefreshControl alloc] init];
    rc.attributedTitle = [[NSAttributedString alloc]initWithString:@"下拉刷新"];
    // 一定要注意selector里面的拼写检查
    [rc addTarget:self action:@selector(refreshTableView) forControlEvents:UIControlEventValueChanged];
    self.refreshControl = rc;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void) refreshTableView
{
    if (self.refreshControl.refreshing) {// 判断是否处于刷新状态
        self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString: @"加载中..."];
        // 添加新的模拟器
        NSDate *date = [[NSDate alloc] init];
        // 模拟请求完成以后,回调方法callBackMethod
        [self performSelector:@selector(callBackMethod:) withObject:date afterDelay: 3];
    }
    
}

- (void) callBackMethod:(id) obj
{
    [self.refreshControl endRefreshing];    // 停止下拉刷新控件,回到初始状态
    self.refreshControl.attributedTitle =[[NSAttributedString alloc]initWithString:@"下拉刷新"];   // 文本变回来
    [self.Logs addObject:(NSDate *)obj];
    
    [self.tableView reloadData];
}

#pragma mark --- UITableViewDataSource代码
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.Logs count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 这可以说是Cell部分最重要的代码段了
    // 定义Cell,然后判断cellIdentifier是否重用
    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"];
    
    // 然后更新cell
    cell.textLabel.text = [dateFormat stringFromDate:[self.Logs objectAtIndex:[indexPath row]]];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    return cell;
}


@end


注意@selector()里面是不会进行拼写检查的,所以要保证拼写正确!


UI下拉刷新(IOS开发)

标签:ios   ios开发   objective-c   uitableviewcell   下拉控件   

原文地址:http://blog.csdn.net/liyakun1990/article/details/40555333

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!