Xcode: приложение с вкладками раскадровки, передающее данные назад и вперед - PullRequest
2 голосов
/ 12 марта 2012

В настоящее время я использую следующий код, чтобы попытаться передать текст в 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

ДАННЫЕ УДАЛЯЮТСЯ, ЕСЛИ МЫ НАЖИМ КНОПКУ НАЗАД НА НАВИГАЦИИ, К примеру.

ViewC1 <= ViewC2 </strong>

1 Ответ

2 голосов
/ 13 марта 2012

Одним из решений является сохранение вашей строки в одиночном коде.

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];
    }
}
...