2016-03-08 8 views
0

мой демо-код очень прост: я хочу, чтобы загрузить из сети, когда контроллер представления присутствует, поэтому я должен позвонить beginRefreshing вручную из viewdidload, чтобы показать загрузку refreshControl в началене uirefreshcontrol показывает, когда TableView имеет много строк

#import "ViewController.h" 

@interface ViewController()<UITableViewDataSource,UITableViewDelegate> 
@property (strong, nonatomic) IBOutlet UITableView *tableView; 
@property(nonatomic,strong) UIRefreshControl* control; 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)]; 

    self.control = [UIRefreshControl new]; 
    [self.tableView addSubview:self.control]; 
    [self.tableView reloadData]; 
    [self.control beginRefreshing]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 


- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 


} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 3; 
} 

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell* cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 
    cell.backgroundColor = [UIColor redColor]; 
    return cell; 
} 
@end 

и если я просто установить количество секций до 1 (всего строк 3), каждый все идет хорошо enter image description here

но если я изменить количество разделов на большее количество как 10 (всего строк 30) , управление обновлением не будет отображаться

enter image description here

Это системная ошибка? или способ, которым я использую контроль обновления, является неправильным?

+0

Просьба указать код, а не скриншот кода. – Leo

+0

@ Leo OK, я уже разместил код сейчас :) – ximmyxiao

ответ

1

На самом деле его показывающие даже с 10 секций с 30 строк в каждой. Проблема заключается в том, что он скрывается сверху. Попробуйте это:

self.control = [UIRefreshControl new]; 
[self.tableView addSubview:self.control]; 
[self.tableView reloadData]; 
[self.control beginRefreshing]; 
[self.tableView setContentOffset:CGPointMake(0, -self.tableView.contentInset.top) animated:true]; 

И я не знаю, почему вы хотите, чтобы показать загрузку инициал. Это должно быть вызвано действием пользователя раскрывающегося списка. Затем вы обновляете страницы и загружаете страницу. Вы также должны рассмотреть вопрос о добавлении

-(void)setUpRefreshControl 
{ 
    self.control = [UIRefreshControl new]; 
    [self.tableView addSubview:self.control]; 
    [self.tableView reloadData]; 
// [self.control beginRefreshing]; 
    [self.tableView setContentOffset:CGPointMake(0, -self.tableView.contentInset.top) animated:true]; 
    [ self.control addTarget:self action:@selector(refresh) forControlEvents:UIControlEventValueChanged]; 

} 

- (void)refresh { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ 
     //Background Thread 
     //Do data refresh task here like getting new data for UI. 
     sleep(1); 
     dispatch_async(dispatch_get_main_queue(), ^(void){ 
      [self.control endRefreshing]; 
      [self.tableView reloadData]; 
     }); 
    }); 
} 
+0

, потому что в реальном коде я хочу загрузить из сети когда контроллер представления присутствует, поэтому я хочу, чтобы элемент управления обновлением был замечен в начале, поэтому мне нужно вручную установить смещение содержимого для достижения этого? – ximmyxiao

+0

Как вы думаете, это какая-то ошибка системы? – ximmyxiao

+0

У меня будет изменение смещения, чтобы достичь этого, как я уже упоминал. Потому что UIRefreshControl и UITableView работают независимо. –

0
remove this line 

self.tableView.tableFooterView = [[UIView Alloc] initWithFrame: CGRectMake (0, 0, 1, 1)];

и сделать как это

self.control = [UIRefreshControl new]; 
[self.tableView addSubview: self.control]; 
[ self.control addTarget:self action:@selector(refresh) forControlEvents:UIControlEventValueChanged]; 

- (void)refresh { 
    //refresh your data 
    [self.control endRefreshing]; 
    [self.tableView reloadData]; 
} 
+0

хочу загрузить из сети, когда присутствует контроллер вида, поэтому мне нужно вызвать beginRefreshing вручную из viewdidload – ximmyxiao

Смежные вопросы