UIRefreshControl iOS 6 xcode

42

有人有如何在Xcode中实现新的UIRefreshControl的简短示例吗? 我有一个显示推文的UITableViewController,想要能够下拉刷新。


看起来你期望得到类似这个的东西:http://www.lextech.com/2012/10/ios-6-pull-to-refresh-tutorial/ 在新的操作系统中,我们能够呈现类似或相同的OTB下拉刷新场景。 - Mike Davis
3个回答

68

如果你有一个UITableViewController,你可以在viewDidLoad中设置它:

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(refresh)
         forControlEvents:UIControlEventValueChanged]; 
self.refreshControl = refreshControl;

然后在这里可以进行刷新操作:

-(void)refresh {
    // do something here to refresh.
}

刷新完成后,请调用[self.refreshControl endRefreshing];停止刷新控件,正如rjgonzo所指出的那样。


谢谢iBlue!! 在(void) refresh中,我需要放什么?抱歉,我很新手,苹果文档对我来说有点复杂。 - Gareth
如果你更喜欢使用按钮来刷新,而不是刷新控制器,你会如何处理呢?只需将那个代码放入“刷新”方法中即可。没有什么花哨的东西。 - danqing
17
别忘了调用[self.refreshControl endRefreshing];来停止刷新控件。你也可以设置一个标题。干杯。 - rjgonzo
1
我不得不将UIRefreshControl作为UITableView的子视图添加,才能使其正常工作:[self.myTableView addSubview:refreshControl]; - DiscDev

32

你也可以在Interface Builder中进行配置。虽然它目前的工作方式只能为您节省几行代码。

选择TableViewController场景,在属性检查器中,您将找到一个名为“Refreshing”的下拉列表选项。将其设置为“Enabled”。您会注意到在视图控制器层次结构中添加了一个“Refresh Control”(您不会看到任何东西被可视地添加到场景本身)。奇怪的是,在将刷新控件连接到IBAction(值更改事件)之后,事件似乎没有被触发。我猜这是个错误(?),但同时启用"正在刷新"会创建UIRefreshControl对象并将其分配给视图控制器的refreshControl属性。完成这些操作后,您可以将事件处理行添加到viewDidLoad方法中:

[self.refreshControl addTarget:self action:@selector(refreshView:) forControlEvents:UIControlEventValueChanged];

在你的refreshView:方法中,你可以完成一些工作,然后停止刷新动画:

- (void)refreshView:(UIRefreshControl *)sender {
    // Do something...
    [sender endRefreshing];
}

顺便提一下,您可能不想在操作处理程序中调用 -endRefreshing,因为这样您的 UIRefreshControl 将在执行“弹跳”动画后立即消失。 - Dave DeLong
1
关于“事件似乎没有被触发”的部分,有什么想法吗?看起来我可以在InterfaceBuilder中添加这个,但如果这不起作用,那有什么意义呢?虽然添加这些代码不需要太多的工作量,但这似乎非常奇怪。你有没有找出为什么会这样? - Dan Morrow
2
“刷新”项仅在您从列表中拉出TableViewController对象时才存在。如果您自己构建视图,则不存在该项。因此,如果没有该项,请不要感到惊讶。 - brainray
2
在XCode 6中,IB的错误已经修复。现在在IB中,您可以从“刷新控件”控件上进行控制拖动,并创建一个IBAction。 - Avi Cohen

18

这是如何下拉并刷新的方法

在你的 UITableViewController.h 文件中添加 UIRefreshControl *refreshControl;-(void) refreshMyTableView; 方法的全局声明

UITableViewController.m 文件的 viewDidLoad

//initialise the refresh controller
refreshControl = [[UIRefreshControl alloc] init];
 //set the title for pull request
    refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"pull to Refresh"];
    //call he refresh function
    [refreshControl addTarget:self action:@selector(refreshMyTableView)
             forControlEvents:UIControlEventValueChanged];
    self.refreshControl = refreshControl;

带有刷新日期和时间的刷新函数

-(void)refreshMyTableView{

    //set the title while refreshing
    refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"Refreshing the TableView"];
    //set the date and time of refreshing 
    NSDateFormatter *formattedDate = [[NSDateFormatter alloc]init];
    [formattedDate setDateFormat:@"MMM d, h:mm a"];
    NSString *lastupdated = [NSString stringWithFormat:@"Last Updated on %@",[formattedDate stringFromDate:[NSDate date]]];
    refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:lastupdated];
    //end the refreshing
    [refreshControl endRefreshing];

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接