0

у меня есть 2 ViewControllers с целью ландшафтной ориентацииIOS - обмен данными между ViewControllers

Мой первый VC (portraitVC) имеет несколько UITextFields (около 30 из них) я использую NSNotifications наблюдать, когда ориентация интерфейса меняется, и когда он делает это, нажимает viewController на экране (для ландшафта)

Мой вопрос в том, можно ли делиться My UITexFields среди обоих VC, как если бы я входил что-то в портрет, тогда, когда я перехожу в альбомный режим I не теряйте текст, введенный мной на TextField: и он должен работать наоборот слишком

Вы очень почитали

+1

Вот хороший гид (с источником): http://iphonedevsdk.com/forum/iphone-sdk-development/54859-sharing -data-between-view-controllers-and-other-objects-link-fixed.html –

ответ

1

Я могу придумать пару способов справиться с этим.

Прежде всего, передумайте свой выбор, чтобы использовать два разных VC для обработки изменений ориентации. Насколько сложно было бы обновить пользовательский интерфейс вашего первого VC, чтобы он выглядел соответствующим портрету?

Во-вторых, абстрактные данные из в структуры или класса, так что вы можете передать его назад и вперед между вашими двумя VCs

@interface MyDataStorage : NSObject { 
    NSString* text1; 
    NSString* text2; 
    NSString* text3; 
    NSString* text4; 
} 

Наконец, вы можете создать протокол, чтобы держать два VCs в синхронизации :

@protocol VCSync : NSObject { 
- (void)updateTextBox1:(NSString*)contents; 
- (void)updateTextBox2:(NSString*)contents; 
... 
} 

вы должны держать ссылки на другой VC, так что вы можете вызвать соответствующий метод из ваших TextBox делегатов обратных вызовов.

RE: Документация ссылка

Если вы ссылки этот отрывок: There are better ways to provide unique views for different orientations, such as presenting a new view controller, то вы должны прочитать предыдущее предложение.

Новый VC предлагается только в том случае, если вы меняете всю свою иерархию представлений. Если вы изменяете размер текстовых полей, я просто напишу код для этого в willAnimateRotationToInterfaceOrientation:duration:, так как вам не придется перемещать какую-либо информацию с одного VC на другой.

Если вы все еще решите продолжить работу с другим VC, я бы создал класс, который содержит только набор из NSString s или NSAttributedString s, поскольку ваши потребности диктуют. Вы бы тогда нужен метод на каждом из вашего VCs который идет что-то вроде:

- (void)updateTextboxesWithData:(MyDataStorage*)data { 
    for(UITextbox in self.textboxes) { 
     t.text = data.string; 
    } 
} 
+0

Благодарим вас за быстрый ответ Clay - ну, я хочу, чтобы LAndscape выглядел совсем по-другому - также согласно документации Apple, https: // разработчик. apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html - они рекомендуют использовать 2 отдельных VC - какие другие способы вы могли бы подумать об этом? - пожалуйста, поделитесь –