2013-11-22 5 views
9

Я пытаюсь реализовать функцию pull для обновления в своем приложении. Архитектура такова, что есть UITableView внутри UIViewController. Я хочу, чтобы можно было обновить табличное представление при отключении. Я пробовал код ниже в методе viewDidLoad, но он не работает. Может ли кто-нибудь сказать мне, где я ошибаюсь в реализации?Потяните, чтобы обновить UITableView внутри UIViewController

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]; 
+1

возможно дубликат [UIRefreshControl без UITableViewController] (http://stackoverflow.com/questions/12497940/uirefreshcontrol-without-uitableviewcontroller) – Amar

+0

Возможный дубликат [Pull to refresh UITableView без UITableViewController] (http://stackoverflow.com/questions/10291537/pull-to-re fresh-uitableview-without-uitableviewcontroller) – Lanorkin

ответ

-11

UIRefreshControl without UITableViewController

Или вы можете использовать UITableViewController вместо UIViewController.

+0

Невозможно сделать это из-за некоторых ограничений. Есть ли такая работа, что мне не нужно менять архитектуру. –

+0

Amar post хорошая ссылка выше вашего вопроса. http://stackoverflow.com/questions/12497940/uirefreshcontrol-without-uitableviewcontroller –

15

Поскольку вы не можете использовать 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; 

Надеется, что это помогает!

2

вы можете увидеть здесь: UIRefreshControl в UIViewController (с 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

8
-(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]; 
} 
+2

Не могли бы вы добавить какое-то объяснение? – Sal00m

0

Я думаю, вам нужно установить контроль обновления UITableView. Мне нужно будет узнать больше о вашем коде и структуре представления, чтобы диагностировать проблему.

Вот учебник для Objective-C и быстрым: http://www.jackrabbitmobile.com/design/ios-custom-pull-to-refresh-control/

3

Обновленный ответ для 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) 
+0

добавление refreshControll как viewview subview работает также на объекте c –

0

Для 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 
} 
1

Для 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() 
} 
Смежные вопросы