我正在尝试在我的应用程序中实现UIRefreshControl。我有一个xib文件,我向空的nib文件添加了一个UITableViewController,并将刷新属性设置为"enabled“。此外,我还向viewDidLoad添加了代码和自定义刷新方法。问题是我有一个错误,我不能找到我的对象的任何信息,我得到“viewDidLoad 'refreshControl‘on....in viewDidLoad on type ViewController”
- (void)viewDidLoad{
[super viewDidLoad];
self.myTableView =
[[UITableView alloc] initWithFrame:self.view.bounds
style:UITableViewStyleGrouped];
self.myTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight;
self.myTableView.delegate = self;
self.myTableView.dataSource = self;
[self.view addSubview:self.myTableView];
UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
[refresh addTarget:self action:@selector(refreshView:) forControlEvents:UIControlEventValueChanged];
self.refreshControl = refresh;
}
-(void)refreshView:(UIRefreshControl *)refresh {
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Refreshing data..."];
// custom refresh logic would be placed here...
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM d, h:mm a"];
NSString *lastUpdated = [NSString stringWithFormat:@"Last updated on %@",
[formatter stringFromDate:[NSDate date]]];
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:lastUpdated];
[refresh endRefreshing];
}我不知道为什么这个属性不是available....what,我错过了吗?
看起来我需要在我的ViewController.h文件中继承UITableViewController。如果我在那里已经有了UITableView,我如何从两者继承呢?如果我将代码从ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>更改为ViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>,则会得到一个错误:
error: NSInternalInconsistencyException',
reason: '-[UITableViewController loadView] loaded the "ViewController_iPhone" nib but didn't get a UITableView.'发布于 2012-10-10 02:25:55
您可以将UIRefreshControl作为子视图添加到UITableView中。
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
[self.myTableView addSubview:refreshControl];根据戴夫的评论,这可能会在未来版本的iOS中中断。因此,请在使用它时小心,并尝试引发关于这一点的bug report to apple。
更好的方法是添加UITableViewController作为ChildViewController的self,然后添加tableViewController.tableView作为self.view的子视图。你不需要做任何修改就能让它以这种方式工作。
[self addChildViewController:tableViewController];
[self.view addSubview:tableViewController.tableView];您可以相应地定义tableView的框架。使用这种方法,UIRefreshControl的工作方式应该与UITableViewController的工作方式相同。`
发布于 2012-10-15 15:36:53
要记住的事情:
UIRefreshControl仅用于UITableViewController,因此您的类应该是UITableViewController.UITableViewController的子类具有属性refreshControl,您应该分配一个UIRefreshControl并将其设置为该属性。例如:
UITableViewController *tableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(refreshControlAction:) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = refreshControl;发布于 2013-09-13 23:34:26
所有这些都是做简单事情的复杂方法。
您不需要添加刷新控件,也不需要在viewController中声明刷新控件。添加pull-to-refresh是一个两步过程。
步骤1:在你的故事板中,进入你的tableViewController,在上面写着“正在刷新”的地方,选择“启用”。
步骤2:将以下代码添加到viewDidLoad中的tableViewController.m文件中:
[self.refreshControl addTarget:self
action:@selector(refresh)
forControlEvents:UIControlEventValueChanged];这就是整个过程,除了在-refresh方法中做一些事情之外。当您希望它停止刷新时,调用[self.refreshControl endRefreshing];。
https://stackoverflow.com/questions/12805003
复制相似问题