2012-03-12 3 views
0

У меня есть приложение, которое представляет Table View для разных файлов. Я настроил его для асинхронной загрузки и хотел бы, чтобы выбранная ячейка отображала индикатор выполнения. Я смотрел онлайн весь день, и все, что я нашел до сих пор, кажется совершенно неполным в том, как это сделать. Вот мой код до сих пор для загрузки и настроен на статус загрузки showview.Добавить UIProgressView в ячейку TableView

Код:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row]; 
NSURL *url = [NSURL URLWithString:entry.articleUrl];  
self.nameit = entry.articleTitle; 
NSURLRequest *theRequest = [NSURLRequest requestWithURL:url   cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60]; 
receivedData = [[NSMutableData alloc] initWithLength:0]; 
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self  startImmediately:YES]; 
} 
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
progress.hidden = NO; 
[receivedData setLength:0]; 
expectedBytes = [response expectedContentLength]; 
} 

- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
[receivedData appendData:data]; 
float progressive = (float)[receivedData length]/(float)expectedBytes; 
[progress setProgress:progressive]; 


} 

- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
[connection release]; 
} 

- (NSCachedURLResponse *) connection:(NSURLConnection *)connection willCacheResponse: (NSCachedURLResponse *)cachedResponse { 
    return nil; 
} 

- (void) connectionDidFinishLoading:(NSURLConnection *)connection { 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *pdfPath = [documentsDirectory stringByAppendingPathComponent:[currentURL stringByAppendingString:@".mp3"]]; 
NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]); 
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
[receivedData writeToFile:pdfPath atomically:YES]; 
progress.hidden = YES; 
[connection release]; 
} 
+0

Ваш вопрос о добавлении индикатора выполнения в tableviewcell или о том, чтобы индикатор прогресса отображал прогресс? Код, который вы показываете, похоже, не задает вопрос в заголовке. – sosborn

+0

Я спрашиваю о добавлении индикатора прогресса в tableviewcell. Код, который я опубликовал, - это код, который начнет загрузку. Я отправил код выполнения для загрузки. Я адаптировал этот код для запуска в обычном контроллере представления, где я добавил индикатор выполнения, используя IB, и он загружает и показывает прогресс. Просто не могу понять, как показывать индикатор выполнения в выбранной ячейке просмотра таблицы при запуске загрузки, показывать ли он прогресс, а затем скрываться после завершения загрузки. – user717452

+0

Каждый tableviewcell имеет вид под названием contentView. Просто добавьте progressBar в этот contentView, как и любое другое представление. – sosborn

ответ

5

Во-первых, добавьте переменную UIProgressView вам интерфейс, так что вы можете ссылаться на него из любого метода в классе.

Затем, когда пользователь выбирает его. вы должны инициализировать его

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UITableViewCell *cell =[tableView cellForRowAtIndexPath:indexPath]; 

    progress = [[UIProgressView alloc]initWithProgressViewStyle:UIProgressViewStyleBar]; 
    progress.frame = CGRectMake(10, 10, 30, 30); 
    progress.progress = 0.0; 

    progress.center = CGPointMake(23,21); 

    [cell.contentView addSubview:progress]; 


} 

Теперь вы можете обновить Progressbar по мере загрузки файлов и после того, как он просто отправить [progress removeFromSuperView]

Вот оно!