2013-12-11 2 views
0

У меня есть контроллер вида A (VCA) и View B (VCB). VCA извлекает данные из вызова API и заполняет метки и т. Д. Возвращаемыми данными.Передача данных с одного контроллера вида на другой без перехода

Когда эти данные будут получены, я хочу передать часть этого файла в VCB без перехода на VCB. Когда пришло время «идти» в VCB, я хочу, чтобы данные уже были там.

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

Из-за скольжения вы можете видеть оба контроллера представления одновременно, поэтому я хочу, чтобы VCB уже был визуально.

Мой текущий код в СВУ называется на DoubleTap жест распознаватель:

- (void)showDetailView 
{ 
    // Initialize VCB 
    ViewContollerB *vcb = [[ViewContollerB alloc] init]; 

    // ················································ 
    // Pass data to ViewContollerB 
    // ················································ 

    vcb.currently = currently; 
    vcb.hourly = hourly; 
    vcb.daily  = daily; 
    vcb.unitTemp = unitTemp; 

    vcb.currentLocationCity = currentLocationCity; 
    vcb.currentLocationRegion = currentLocationRegion; 
    vcb.currentTemp   = currentTemp; 

    // Set transition style to cross fade 
    vcb.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 

    // Present the daily details 
    [self presentViewController:vcb animated:YES completion:nil]; 
} 

Как я уже говорил, это работает отлично.

На приемном конце (VCB), у меня есть такие вещи, как это в - (void)viewWillAppear:(BOOL)animated

if (currentTemp) { 
    // Displays data from passed variables 
    [self displayHeaderInfo]; 
} 

То, что я хотел бы сделать, по существу, это в СВУ:

// PRETEND DATA RETURNED FROM API CALL IN VCA 

if (currentTemp) { 
    // Set array for VCB 
    vcb.currentTemp = currentTemp; 

    **** CODE TO SEND THIS TO VCB **** 
    **** BUT NOT GO TO VCB, STAY **** 
    **** RIGHT HERE IN VCA.  **** 

    // Display in VCA 
    [self displayCurrentTemp]; 
} 

Возможно ли это?

+2

Почему бы просто не удалить строку '[self presentViewController: vcb animated: YES complete: nil];'? – Snowman

+0

Эта строка: vcb.currentTemp = currentTemp; показывает, что вы уже знаете, как передавать данные в vcb. Так что ваш вопрос не совсем ясен ... – user523234

+0

Да, я могу это передать. Но мне нужно, чтобы данные проходили молча, когда они были готовы, а не на каком-либо пользовательском взаимодействии или событии. Имеет ли это смысл? Похоже, что ответ ниже - это путь. Я собираюсь попробовать это и отчитаться. –

ответ

2

В этом случае лучше всего назначить роль получения данных отдельному объекту DataFetcher. Не заставляйте своих UIViewControllers отвечать за выборку данных.

Внедрение DataFetcherDelegate или блока завершения, который будет уведомлять ViewControllers, когда данные были извлечены.

См. this answer для примера реализации подхода делегата.

+1

Спасибо, что указал мне в правильном направлении. –

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