2012-10-01 19 views
13

Próbuję przenieść UIRefreshControl na szczycie mojego headerView lub przynajmniej uzyskać go do pracy z contentInset. Ktoś wie, jak z niego korzystać?UITableView i UIRefreshControl

Użyłem headerView, aby mieć ładne tło podczas przewijania w TableView. Chciałem mieć przewijane tło.

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
// Set up the edit and add buttons. 

self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
self.tableView.backgroundColor = [UIColor clearColor]; 

[self setWantsFullScreenLayout:YES]; 

self.tableView.contentInset = UIEdgeInsetsMake(-420, 0, -420, 0); 

UIImageView *top = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"top.jpg"]]; 
self.tableView.tableHeaderView = top; 

UIImageView *bottom = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bottom.jpg"]]; 
self.tableView.tableFooterView = bottom; 

UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"settingsIcon"] style:UIBarButtonItemStylePlain target:self action:@selector(showSettings)]; 
self.navigationItem.leftBarButtonItem = leftButton; 

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addList)]; 
self.navigationItem.rightBarButtonItem = addButton; 

//Refresh Controls 
self.refreshControl = [[UIRefreshControl alloc] init]; 

[self.refreshControl addTarget:self action:@selector(refreshInvoked:forState:) forControlEvents:UIControlEventValueChanged]; 
} 

Odpowiedz

32

Nie jestem pewien, co twoim zamiarem jest z rzeczy contentInset, ale jeśli chodzi o dodanie UIRefreshControl do UITableView, można to zrobić. UIRefreshControl jest w rzeczywistości przeznaczony do użytku z UITableViewController, ale jeśli dodasz go jako podzbiór do UITableView, to działa on w magiczny sposób. Pamiętaj, że jest to nieudokumentowane zachowanie i może nie być obsługiwane w innym wydaniu na system iOS, ale jest legalne, ponieważ nie używa prywatnych interfejsów API.

- (void)viewDidLoad 
{ 
    ... 
    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; 
    [refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged]; 
    [self.myTableView addSubview:refreshControl]; 
} 

- (void)handleRefresh:(id)sender 
{ 
    // do your refresh here... 
} 

Kredyt na @Keller for noticing this.

+3

Wewnątrz normalnego kontrolera UIView nie masz self.refreshControl, więc całkowicie się mylisz obiektyw kamery – Godfather

+0

świetna rada ... thx – paiego

+1

Ta metoda ma pewne problemy, jeśli widok tabeli ma widok tytułowy (przynajmniej na iOS7). Gdy przewiniesz w dół podczas odświeżania, sekcje tabeli zostaną usunięte, przesunięte o wysokość widoku tytułu. – AlBeebe

10

@ Odpowiedź Echelon jest na miejscu, ale mam jedną niewielką sugestię. Dodaj kontrolkę odświeżania jako dziedzinę @, aby móc uzyskać do niej dostęp później.

w YourViewController.h

@property (nonatomic, strong) UIRefreshControl *refreshControl; 

w YourViewController.m

-(void) viewDidLoad { 
    self.refreshControl = [[UIRefreshControl alloc] init]; 
    [self.refreshControl addTarget:self action:@selector(refresh) forControlEvents:UIControlEventValueChanged]; 
    [self.tableView addSubview:self.refreshControl]; //assumes tableView is @property 
} 

i wielki powód, aby zrobić to w ten sposób ...

-(void)refresh { 
    [self doSomeTask]; //calls [taskDone] when finished 
} 

-(void)taskDone { 
    [self.refreshControl endRefreshing]; 
} 

Wystarczy daje wykładowa szeroki dostęp do UIRefreshControl, dzięki czemu można endRefreshing lub sprawdzić właściwość isRefreshing UIRefreshControl.

+1

'@property (nonatomic, strong) UIRefreshView * refreshControl;' prawdopodobnie oznacza "UIRefreshControl" tutaj. Dobrze? –

+0

@ self.name Po co wywoływać 'taskDone' po zakończeniu? To mnie zaskakuje. w rzeczywistości powinien wykonać 'taskDone' i wrócić, aby odświeżyć, czy mam rację? +1 za twoją odpowiedź. – Ron

Powiązane problemy