プルして更新する機能をアプリケーションに実装しようとしています。アーキテクチャは、UITableView
内にUIViewController
があるようなものです。プルダウン時にテーブルビューを更新できるようにしたい。以下のコードを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];
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;
お役に立てれば!
-(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];
}
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)
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()
}
ここで見ることができます:UIViewControllerのUIRefreshControl(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
アプリがiOS6(およびそれ以降)のみをサポートしている場合:提案します IRefreshControl
IOS 5もサポートしている場合は、 https://github.com/enormego/EGOTableViewPullRefresh を使用できます。
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
}
UITableViewの更新コントロールを設定する必要があると思います。問題を診断するには、コードとビュー構造をさらに確認する必要があります。
これがobjective-cとSwiftのチュートリアルです: http://www.jackrabbitmobile.com/design/ios-custom-pull-to-refresh-control/