我有一个从api获取电影然后将数据加载到UITableView的方法。我想重用网络调用进行刷新控制,并在http get请求结束时调用一个完成处理程序,它基本上会在刷新控制成功后停止。这可能吗?
func getMovies(completion: (() -> ())?) {
SVProgressHUD.show()
Alamofire.request("https://api.moviesite").responseJSON {
response in
switch response.result {
case .success(let data):
if let json = data as? NSDictionary {
self.movieResults = json["results"] as! [NSDictionary]
self.nowPlayingTableView.reloadData()
}
case .failure(let error):
print(error)
self.showNetworkError(show: true)
}
SVProgressHUD.dismiss()
if completion != nil {
completion!()
}
}
}
当我在viewDidLoad中使用此方法时,我想做类似的事情:
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(NowPlayingViewController.getMovies(refreshControl.endRefreshing)), for: .valueChanged)
nowPlayingTableView.insertSubview(refreshControl, at: 0)
但是我收到了关于
的编译器错误getMovies不能使用,你的意思是使用值类型吗?
答案 0 :(得分:2)
您使用selector
设置的唯一UIRefreshControl
为#selector(refreshing)
或#selector(refreshing(_:))
表示selector
,其中UIRefreshControl
为参数或没有任何参数。如果您想结束刷新,请尝试这样做。
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(refreshing(_:)), for: .valueChanged)
nowPlayingTableView.insertSubview(refreshControl, at: 0)
现在为您的控制器添加一个操作refreshing
并与其一起调用getMovies
,并在完成getMovies时调用endRefreshing
上的UIRefreshControl
func refreshing(_ sender: UIRefreshControl) {
self.getMovies() {
sender.endRefreshing()
}
}
答案 1 :(得分:0)
将您的refreshControl.addTarget(self, action: #selector(NowPlayingViewController.getMovies(_:)), for: .valueChanged)
代码更改为:
func getMovies(_ sender: UIRefreshControl) {
...
sender.endRefreshing()
}
你的功能
var myApp = angular.module("myApp", []);
myApp.controller('studentController', function($scope, $route, $routeParams, $http, $location) {
//Get all students
$scope.getStudents = function() {
$http.get('/api/student/').then(function(response) {
$scope.students = response.data;
});
};
});