Загрузить больше данных из веб-службы, когда пользователь прокручивает UITableView - PullRequest
2 голосов
/ 11 июня 2011

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

Есть идеи для этого? Большое спасибо!

1 Ответ

6 голосов
/ 11 июня 2011

Библиотека Facebook three20 имеет TTTableViewController и TTTableViewDataSource , который позволяет загружать контент из Интернета. Я думаю, это то, что вы ищете.

UPDATE three20, похоже, больше не поддерживается, поэтому игнорируйте ссылки выше. Ответа ниже должно быть достаточно.

Если вы хотите сделать что-то самостоятельно, а не использовать Three20, тогда вы можете реализовать UITableViewDelegate -tableView:willDisplayCell:forRowAtIndexPath: в вашем контроллере табличного представления. Когда пользователь прокручивает до последнего (раздел, строка) в вашем табличном представлении (которое вы можете узнать по пути индекса), просто сделайте асинхронный вызов http и перезагрузите табличное представление при поступлении контента.

// YourTableViewController.m

// Assuming your table view's controller is a subclass of UITableViewController
// if its not, you will need to manually set your table view's delegate to this class
// i.e. self.tableView.delegate = self;

// if a table view's delegate implements -tableView:willDisplayCell:forRowAtIndexPath:
// the table view will call this method before displaying any cell

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section == lastSection && indexPath.row == lastRowInLastSection) {
        // assuming you use ASIHTTPRequest
        NSURL *url = [NSURL URLWithString:@"http://your-webservice.example.com"];
        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
        [request setDelegate:self];
        [request startAsynchronous];          
    }
}

// ASIHTTPRequest calls this method when it gets a response for a HTTP request
- (void)requestFinished:(ASIHTTPRequest *)request {
    // you can get the response data from
    // [request responseString] or
    // [request responseData]
    ...update your data source...
    [self.tableView reloadData];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...