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, стираются или сбрасываются до нуля.

Итак, в основном проблема с использованием небольшого цифрового изображения:

ДАННЫЕ ПЕРЕДАЮТСЯ ПРАВИЛЬНО.

ViewC1 => ViewC2 => ViewC3

ДАННЫЕ УДАЛЯЮТСЯ, ЕСЛИ МЫ НАЖАТЬ КНОПКУ НАЗАД НА NAVIGATION EX.

ViewC1 ‹= ViewC2


person John    schedule 12.03.2012    source источник
comment
какой метод вы используете, чтобы вернуться к viewc1? dismissmodalviewcontroller?   -  person Pochi    schedule 12.03.2012
comment
Вам не обязательно его использовать. Xcode автоматически создает кнопку возврата в навигации, когда вы используете приложение с вкладками и связываете контроллеры представления с помощью Push Segue. Я использую Storyboard для этой части, поэтому все делается в IB, и никакого программирования не требуется при работе с push и т.д. Но да, если бы я знал, что Xcode делает с этой частью, я, вероятно, мог бы это понять.   -  person John    schedule 12.03.2012


Ответы (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];
    }
}
person AMayes    schedule 13.03.2012