2015-02-22 7 views
0

У меня есть UIViewController А с нажимной Segue к UIViewController B, в некоторых случаях мне нужно повторить это, например:Как вернуться к предыдущему контроллеру представления?

ViewController A -> ViewController B -> ViewController A -> ViewController B 

Также мне нужно передать данные из ViewController B -> ViewController A

Я не хочу создать 4 ViewControllers, так как я могу переработать код в этом случае?

ответ

0

Их не следует перерабатывать. Под этим я подразумеваю, что вы не должны перерабатывать конкретные экземпляры этих контроллеров представлений. Разумеется, может быть, что какая-то техническая реализация позволяет это, но она (в отличие от ячеек таблицы) не нужна.

Вы пытаетесь оптимизировать преждевременно. Просто создайте новые экземпляры контроллера представлений, как вам нужно. Любой iPhone, поддерживающий iOS6 и более поздние версии, справится с этим без каких-либо проблем.

Передача данных может быть сделано удобным способом, например

-(void)configureWithData:(WhateverDataType *)paramData 

В подготовке к Segue, вы бы получить ссылку на целевой контроллер представления и передавать данные, как это:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    CustomViewController *nextViewController = [segue destinationViewController]; 
    [nextViewController configureWithData:someData]; 
} 
+0

Я понял, но в каком случае я должен оптимизировать, например? потому что в моем случае у меня будет 2 одинаковых кода. – Malaka

+0

У вас есть два экземпляра одного класса. У вас нет «двух кодов» в ваших словах, у вас есть только «один». Наличие нескольких экземпляров одного класса является фундаментальным для объектно-ориентированного программирования и ожидается и желательно. Я рекомендую ознакомиться с основными принципами ООП, чтобы правильно понять, что такое класс, объект, граф объекта, экземпляр . Вы только начинаете оптимизировать, когда сталкиваетесь с проблемами памяти/производительности, несмотря на то, что прилагаете все усилия для правильного архивированного приложения , –

+0

Я понимаю, я был слепым. Большое спасибо за советы – Malaka

1

Вы просто нажимаете и выбираете одинаковые контроллеры.

Если вы хотите B общаться с A затем настроить протокол на А, communitactes с B. (или кто-либо реализует протокол)

код B

@protocol MyProtocol <NSObject> 
-(void)callFromB:(id)data; 
@end 
@property (weak) id <MyProtocol> delegate; 

реализация:

if ([self.delegate respondsToSelector:@selector(callFromB:)]){ 
     [self.delegate callFromB:data]; 
    } 

код

B.delegate = self; 
-(void)callFromB:(id)data { 
... 
} 
Смежные вопросы