ios 在 UIViewController 中拉动以刷新 UITableView
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20138698/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Pull to refresh on UITableView Inside a UIViewController
提问by Hassan Zaheer
I am trying to implement the pull to refresh functionality in my application. The architecture is such that the there is a UITableView
inside a UIViewController
. I want to be able to refresh the tableview on pull down. I tried the code below in the viewDidLoad
method, but it does not work. Can any one tell me where am I wrong in implementation?
我正在尝试在我的应用程序中实现 pull to refresh 功能。架构是这样的,UITableView
里面有一个UIViewController
. 我希望能够在下拉时刷新 tableview。我在viewDidLoad
方法中尝试了下面的代码,但它不起作用。谁能告诉我我在实施中哪里错了?
UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
refresh.tintColor = [UIColor grayColor];
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
[refresh addTarget:self action:@selector(get_vrns) forControlEvents:UIControlEventValueChanged];
[self.vrnTable addSubview:refresh];
采纳答案by Evgeniy S
UIRefreshControl without UITableViewController
没有 UITableViewController 的 UIRefreshControl
Or you can use UITableViewController
instead of a UIViewController
.
或者您可以使用UITableViewController
代替UIViewController
.
回答by aksh1t
Since you can't use a UITableViewController
instead of UIViewController
, try doing this :
由于您不能使用UITableViewController
代替UIViewController
,请尝试执行以下操作:
UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.vrnTable;
UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
refresh.tintColor = [UIColor grayColor];
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
[self.refresh addTarget:self action:@selector(get_vrns) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = self.refresh;
Hope this helps!
希望这可以帮助!
回答by user3781953
-(void)viewDidLoad
{
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventValueChanged];
//[self.mytable addSubview:refreshControl];
UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.mytable;
tableViewController.refreshControl = refreshControl;
}
-(void)refreshData
{
//Put your logic here
//reload table & remove refreshing image
UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.mytable;
[self.mytable reloadData];
[tableViewController.refreshControl endRefreshing];
}
回答by leerob
Updated answer for Swift 1.2
Swift 1.2 的更新答案
var refreshControl = UIRefreshControl()
refreshControl.backgroundColor = blue
refreshControl.tintColor = UIColor.whiteColor()
refreshControl.addTarget(self, action: Selector("yourFunctionHere"), forControlEvents: UIControlEvents.ValueChanged)
self.tableView.addSubview(refreshControl)
回答by Satheeshwaran
For Swift 3 and iOS backward compatibility
对于 Swift 3 和 iOS 向后兼容性
var refreshControl = UIRefreshControl()
let string = "Pull to refresh"
let attributedString = NSMutableAttributedString(string: string)
attributedString.addAttributes([NSFontAttributeName:UIFont.systemFont(ofSize: 16)),NSForegroundColorAttributeName:UIColor.white], range: NSRange.init(location: 0, length: string.characters.count))
self.refreshControl.attributedTitle = attributedString
self.refreshControl.tintColor = UIColor.white
self.refreshControl.addTarget(self,
action: #selector(self.pulledDownForRefresh),
for: .valueChanged)
if #available(iOS 10.0, *) {
self.accountSummaryTableView.refreshControl = refreshControl
} else {
self.accountSummaryTableView.addSubview(refreshControl)
}
func pulledDownForRefresh() {
//do some opertaion and then call
self.refreshControl.endRefreshing()
}
回答by Nhat Dinh
If your app support iOS 6 (and later) only: I suggest UIRefreshControl
如果您的应用仅支持 iOS 6(及更高版本):我建议UIRefreshControl
If also support iOS 5, you can use https://github.com/enormego/EGOTableViewPullRefresh
如果还支持 iOS 5,可以使用 https://github.com/enormego/EGOTableViewPullRefresh
回答by ldt25290
you can see here : UIRefreshControl in UIViewController (with UITableView)
你可以在这里看到: UIViewController 中的 UIRefreshControl (with UITableView)
@interface MyViewController ()
{
UIRefreshControl *refreshControl;
}
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end
@implementation MyViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *refreshView = [[UIView alloc] initWithFrame:CGRectMake(0, 55, 0, 0)];
[self.tableView insertSubview:refreshView atIndex:0]; //the tableView is a IBOutlet
refreshControl = [[UIRefreshControl alloc] init];
refreshControl.tintColor = [UIColor redColor];
[refreshControl addTarget:self action:@selector(reloadDatas) forControlEvents:UIControlEventValueChanged];
/* NSMutableAttributedString *refreshString = [[NSMutableAttributedString alloc] initWithString:@"Pull To Refresh"];
[refreshString addAttributes:@{NSForegroundColorAttributeName : [UIColor grayColor]} range:NSMakeRange(0, refreshString.length)];
refreshControl.attributedTitle = refreshString; */
[refreshView addSubview:refreshControl];
}
-(void)reloadDatas
{
//update here...
[refreshControl endRefreshing];
}
@end
http://www.g8production.com/post/79514553078/ios7-and-uirefreshcontrol-in-uiviewcontroller-with
http://www.g8production.com/post/79514553078/ios7-and-uirefreshcontrol-in-uiviewcontroller-with
回答by Jay Gajjar
Try ready-made controls. They are much easier to implement
尝试现成的控件。它们更容易实施
https://www.cocoacontrols.com/controls/pulltorefreshtransform
https://www.cocoacontrols.com/controls/pulltorefreshtransform
https://www.cocoacontrols.com/controls/qbrefreshcontrol
https://www.cocoacontrols.com/controls/qbrefreshcontrol
https://www.cocoacontrols.com/controls/mspulltorefreshcontroller
https://www.cocoacontrols.com/controls/mspulltorefreshcontroller
回答by manujmv
You can use this controls for this purpose
您可以为此目的使用此控件
http://code4app.net/ios/Pull-To-Refresh-TableView/4f681c096803fa2c63000004
http://code4app.net/ios/Pull-To-Refresh-TableView/4f681c096803fa2c63000004
https://www.cocoacontrols.com/controls/stableviewcontroller
https://www.cocoacontrols.com/controls/stableviewcontroller
https://www.cocoacontrols.com/controls/qbrefreshcontrol
https://www.cocoacontrols.com/controls/qbrefreshcontrol
回答by Anthony Blatner
I think you need to set the refresh control of the UITableView. I would need to see more of your code and view structure to diagnose the problem.
我认为您需要设置 UITableView 的刷新控件。我需要查看您的更多代码和视图结构来诊断问题。
Here's a tutorial for objective-c and swift: http://www.Hymanrabbitmobile.com/design/ios-custom-pull-to-refresh-control/
这是 Objective-c 和 swift 的教程:http: //www.Hymanrabbitmobile.com/design/ios-custom-pull-to-refresh-control/
回答by pableiros
For Swift 3:
对于 Swift 3:
var refreshControl: UIRefreshControl!
override func viewDidLoad() {
super.viewDidLoad()
self.refreshControl = UIRefreshControl()
self.refreshControl.tintColor = UIColor.black
self.refreshControl.addTarget(self,
action: #selector(ViewController.pullToRefreshHandler),
for: .valueChanged)
self.tableView.addSubview(self.refreshControl)
}
@objc func pullToRefreshHandler() {
// refresh table view data here
}