Xcode: приложение с вкладками раскадровки, передающее данные назад и вперед
В настоящее время я использую следующий код, чтобы попытаться передать текст в UITextField между 3 контроллерами представления, которые смотрят на те же файлы ViewController.h и ViewController.m:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"NameOfSegue"]) {
ViewController *ibcVC = segue destinationViewController;
ibcVC.myTextField = self.myTextField;
}
}
У меня есть 3 вида контроллеров, связанных в следующем порядке: ViewC1 => ViewC2 => ViewC3.
Мой UITextField находится на ViewC2.
Когда я нажимаю на кнопку на ViewC2, например, которая нажимает на ViewC3, он просто отлично передает данные в ViewC3. Однако, скажем, я в настоящее время на ViewC2, я набираю что-то в UITextView, и затем я нажимаю кнопку "Назад" в навигации, которую Xcode автоматически помещает туда при работе с приложениями представления с вкладками, это приведет меня к ViewC1, как и ожидалось. Однако, если я нажму кнопку на ViewC1, которая выдвигает в ViewC2, данные / текст, который я набрал в своем UITextField, будет удален или обнулится.
Таким образом, в основном здесь проблема с использованием небольшого цифрового изображения:
ДАННЫЕ ИСПОЛЬЗУЮТСЯ ПРАВИЛЬНО EX.
ViewC1 => ViewC2 => ViewC3
ДАННЫЕ УДАЛЯЮТСЯ, ЕСЛИ МЫ НАЖИМ НАЗАД КНОПКУ НА НАВИГАЦИИ EX.
ViewC1 <= ViewC2
1 ответ
Одним из решений является хранение вашей строки в синглтоне.
SharedStrings.h =
#import <Foundation/Foundation.h>
@interface SharedStrings : NSObject{
NSString *string;
}
+(SharedStrings *)sharedString;
-(void)setString:(NSString *)newString;
-(NSString *)getString;
@end
SharedStrings.m =
#import "SharedStrings.h"
static SharedStrings *sharedString;
@implementation SharedStrings
-(id)init{
self = [super init];
string = [NSString new];
return self;
}
+(SharedStrings *)sharedString{
if (!sharedString) {
sharedString = [[SharedStrings alloc] init];
}
return sharedString;
}
-(void)setString:(NSString *)newString{
string = newString;
}
-(NSString *)getString{
return string;
}
@end
Затем вы можете получить все ваши представления и установить строку при необходимости, например, так:
- (void)viewWillAppear:(BOOL)animated
{
[myTextField setText:[[SharedStrings sharedString] getString]];
[super viewWillAppear:animated];
}
-(void)textFieldDidEndEditing:(UITextField *)textField{
if (textField == enterInfoTF) {
[[SharedStrings sharedString] setString:textField.text];
}
}