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];
    }
}
Другие вопросы по тегам