【问题标题】:UIRefreshControl iOS 6 xcodeUIRefreshControl iOS 6 xcode
【发布时间】:2012-09-18 09:23:04
【问题描述】:

有没有人有一个简短的例子来说明如何在 xcode 中实现新的UIRefreshControl。我有一个UITableViewController,它显示推文,希望能够下拉和刷新。

【问题讨论】:

标签: objective-c iphone xcode ios6 uirefreshcontrol


【解决方案1】:

如果你有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!在(无效)刷新我需要放什么,对不起,我对此很陌生,苹果文档对我来说有点复杂。
  • 如果您宁愿使用按钮刷新,而不是刷新控制器,您将如何处理它?只需将那个代码放在refresh 方法中。没什么特别的。
  • 记得调用[self.refreshControl endRefreshing];停止刷新控制。您还可以设置title。干杯。
  • 我必须将 UIRefreshControl 添加为我的 UITableView 的子视图才能使其正常工作:[self.myTableView addSubview:refreshControl];
【解决方案2】:

这里是如何下拉和刷新

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

UITableViewController.mviewDidLoad

//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];

}

【讨论】:

    【解决方案3】:

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

    选择 TableViewController 场景,在 Attributes Inspector 中,您会找到“刷新”的下拉列表选项。将其设置为“启用”。您会注意到在 View Controller Hierarchy 中添加了“刷新控件”(您不会看到任何视觉上添加到场景本身的内容)。奇怪的是,在将刷新控件连接到 IBAction(值更改事件)之后,该事件似乎没有被触发。我猜这是一个错误(?),但同时,将“刷新”设置为启用会创建 UIRefreshControl 对象并将其分配给视图控制器的 refreshControl 属性。完成后,您可以将事件处理行添加到 viewDidLoad 方法中:

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

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

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

    【讨论】:

    • 仅供参考,您可能不想在动作处理程序中调用 -endRefreshing,因为那样您的 UIRefreshControl 将在执行“快照”动画后立即动画出来。
    • 关于“事件似乎没有被触发”部分。知道为什么吗?看起来我可以在 InterfaceBuilder 中添加它,但是如果这不起作用,那又有什么意义呢?添加的代码并不多,但这似乎很奇怪。有没有发现这是为什么?
    • 只有在您从列表中拉出 TableViewController 对象时,“刷新”项才会出现。如果您自己构建视图,则不是您。所以,不要怀疑它是否不存在
    • 在 XCode 6 上修复了 IB 错误。现在在 IB 中,您可以控制从 Refresh Control 拖动到代码以创建 IBAction。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多