以编程方式调用 UIRefreshControl 不起作用
Posted
技术标签:
【中文标题】以编程方式调用 UIRefreshControl 不起作用【英文标题】:UIRefreshControl not working when called prorgammatically 【发布时间】:2013-05-23 15:49:59 【问题描述】:我的ViewController
中有一个UIRefreshControl
和一个方法refreshView
来处理“拉动刷新”事件。实际拉动时效果很好,但是当我在代码中调用[refresh beginRefreshing]
时,它只显示刷新动画但不调用refreshView
方法。
这里是viewDidload
中初始化刷新控件的代码:
UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
[refresh addTarget:self
action:@selector(refreshView:)
forControlEvents:UIControlEventValueChanged];
self.refreshControl = refresh;
【问题讨论】:
【参考方案1】:根据我对文档的理解:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIRefreshControl_class/Reference/Reference.html
告诉控件刷新操作已启动 以编程方式。 ...当有外部事件时调用此方法 source 触发以编程方式刷新您的表格。
我认为它不是用来启动刷新操作,而只是用于更新它当前正在刷新的刷新控件状态,它会使刷新控件旋转。目的是避免用户拉动表格视图并在它仍在刷新时再次触发刷新操作。
所以你应该自己调用 refreshView: 方法。
【讨论】:
【参考方案2】:只需异步调用 beginRefreshing。
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
dispatch_async(dispatch_get_main_queue(), ^
[refreshControl beginRefreshing];
);
//...
【讨论】:
【参考方案3】:试试这个
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];
【讨论】:
您的viewDidLoad
代码与我的没有区别。 refreshMyTableView
方法不会在 [refresh beginRefreshing]
上调用,仍然。
尝试在结束动作中删除你的':':@selector(refreshView:)以上是关于以编程方式调用 UIRefreshControl 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UIRefreshControl - 当UITableViewController在UINavigationController中时,beginRefreshing无效
iOS 11 beginRefreshing 以编程方式在导航栏上显示大标题
当 tableview 有很多行时,uirefreshcontrol 不显示
UICollectionView UIRefreshControl 在访问不同的视图后没有动画