dia*_*nos 26 iphone refresh objective-c ios uirefreshcontrol
我有一个UITableViewController作为UINavigationController中的根视图控制器,UINavigationController又是UITabBarController中的一个视图控制器.所有人都在故事板中.
我也在Storyboard中为我的表配置了UIRefreshControl,通常看起来应该在拉动时:

但是,如果我在其他标签之间切换一次或两次,它看起来像这样:

它不是旋转或任何东西,只是卡住"满",它一直保持这种状态,直到我完全拉动并触发刷新.
任何想法或建议都会欣赏.
小智 12
user2009606几乎是正确的,我通过调用修复它
[refreshControl endRefreshing];
Run Code Online (Sandbox Code Playgroud)
上
viewWillAppear:
Run Code Online (Sandbox Code Playgroud)
切换选项卡后,refreshControl现在可以正常运行,与其状态无关.
dia*_*nos 11
我知道这已经非常晚了,但是我觉得迟到总比没有好.
不幸的是,没有一个给定的答案对我有用.唯一有用的是viewWillAppear中的这段可怕的代码:
self.refreshControl = nil;
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(refreshFunction) forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;
Run Code Online (Sandbox Code Playgroud)
基本上,每次视图出现时我都会重新创建UIRefreshControl.虽然在发出以下警告时它仍然有效:
强烈建议不要在空闲时更改刷新控件,否则可能无法正常工作.
我真的很惊讶这仍然是一个问题(现在仍然在iOS 9中看到这个).希望这可能对其他人有所帮助.
总结并提供完整的解决方案。
问题:
如果UIRefreshControl在屏幕过渡期间处于动画状态,则它将保持可见但不会处于动画状态。视频https://vid.me/Bkb7
此外,如果拉动刷新动画已开始但尚未完成,然后执行了过渡,则UIRefreshControl将被隐藏但被卡住。视频https://vid.me/Bkb7
解:
在viewWillAppear上启动UIRefreshControl动画,并在viewDidDisappear上结束动画。保存刷新过程的状态,以了解何时显示UIRefreshControl。
贝娄是整个解决方案,还可以处理正确的动画和简单的拉动以刷新动画。
添加到UITableView或子类
初始化:
/// Refresh indicator
var refreshControl = UIRefreshControl()
/// Refresh state
var isRefreshing = false
/// Refresh controll update funcion. Set to enable pull to refresh
var refreshControllUpdateFunction: (() -> ())?
/// Prepeares UIRefreshControll. Call from init
func initRefreshControl(){
addSubview(refreshControl)
refreshControl.addTarget(self, action: "refreshControllTarget", forControlEvents: .ValueChanged)
refreshControl.beginRefreshing()
isRefreshing = true
}
Run Code Online (Sandbox Code Playgroud)
Superview事件处理程序:
/// Call on viewWillApper
func superviewWillApper(){
if isRefreshing && !refreshControl.refreshing{
startRefreshAnimation()
}
}
/// Call on viewDidDisapper
func superviewDidDisappear(){
endRefreshAnimation(false, dataFetched: !isRefreshing)
}
Run Code Online (Sandbox Code Playgroud)
UIRefreshControl动画处理程序:
/// Presents animating UIRefreshControll
func startRefreshAnimation(){
refreshControl.beginRefreshing()
contentOffset = CGPointMake(0, -refreshControl.bounds.size.height)
isRefreshing = true
}
/// Hides UIRefreshControll and saves state of refresh
func endRefreshAnimation(wasEmpty: Bool, dataFetched: Bool){
refreshControl.endRefreshing()
isRefreshing = !dataFetched
if !wasEmpty{
setContentOffset(CGPointZero, animated: true)
}else{
setContentOffset(CGPointZero, animated: false)
}
}
Run Code Online (Sandbox Code Playgroud)
加
table.isRefreshing = true
Run Code Online (Sandbox Code Playgroud)
开始刷新呼叫。
| 归档时间: |
|
| 查看次数: |
7276 次 |
| 最近记录: |