2009-09-30 1 views
0

У меня есть tableView со списком элементов. Когда выбор сделан, новый контроллер представления помещается в стек контроля viewController таблицы TableView.Что такое правильный способ динамического создания контента для UIView?

Мое вопрос в том, что один из видов в иерархии представлений, связанных с толкаемым контроллером вида, требует выборки данных из сети, прежде чем он сможет отобразить его содержимое. Этот выбор выполняется асинхронно через [NSURLRequest requestWithURL: ...]. Каков надлежащий способ передачи данных в представление, которое ему нужно, и вызов этого вида перегружен методом drawRect? В настоящее время я делаю это:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 


    [_connection release]; 
    _connection = nil; 

    [self performSelectorOnMainThread:@selector(GetDataFromCloudAndCreateView) 
         withObject:nil 
        waitUntilDone:NO]; 


} 

Метод GetDataFromCloudAndCreateView конкретизирует вид формируют данные. К сожалению, ничего не делается. Я попробовал [myView setNeedsDisplay], но это не имеет никакого эффекта.

Может ли кто-нибудь набросать правильный способ сделать это? Благодарю.

+0

Вы можете показать метод GetDataFromCloudAndCreateView? –

+0

Valerii, GetDataFromCloudAndCreateView создает экземпляр подкласса UIView - с переопределенным drawRect, который зависит от данных, полученных от облака. Моя задача состоит в том, как сообщить Cocoa-Touch, что я хочу, чтобы этот подкласс UIView отображался сам. В настоящее время этого не происходит, несмотря на то, что [muView setNeedsDisplay] – dugla

ответ

1

То, что я делал в прошлом в таком случае, это создать новый UIViewController в методе connectionDidFinishLoading:, а затем нажать его. Как так:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    [_connection release]; 
    _connection = nil; 

    // Code to stop a loading indicator of some kind 

    UIViewController *newView = [[SomeViewController alloc] initWithData:fetchedData]; 
    [self.navigationController pushViewController:newView animated:YES]; 
} 

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

Надеюсь, что ответит на ваш вопрос.

+0

Cory, Просто так я понятен, что приведенный выше код работает в вашем столеViewController правильно? Например, в методе tableView: accessoryButtonTappedForRowWithIndexPath: вместо того, чтобы сразу нажать на viewController, вы откладываете нажатие на viewController до вызова connectionDidFinishLoading:? – dugla

+0

Я думаю, что у меня есть решение, которое кажется надежным. Я подумал о создании представлений в connectionDidFinishLoading: но я реализовал connectionDidFinishLoading: в нажатом viewController. Он вызывается из viewDidAppear: это позволяет полностью установить иерархию представлений. Затем я просто добавляю subviews в метод, который я вызываю - по основному потоку - из connectionDidFinishLoading: этот подход меньше похож на то, что я сражаюсь с Cocoa. Спасибо за помощь. – dugla

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

  • Нет связанных вопросов^_^