Xcode:Storyboard选项卡式应用程序传递数据

时间:2012-03-12 03:00:55

标签: xcode uiviewcontroller uitabbarcontroller uitextfield storyboard

我目前正在使用以下代码尝试在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 就像预期的那样好。但是,如果我按下推入 ViewC2 的ViewC1上的按钮,我在UITextField中输入的数据/文本已被删除或重置为空。

所以基本上这是使用轻微数字视觉的问题:

数据被正确推送。

ViewC1 => ViewC2 => ViewC3

如果我们在NAVIGATION EX上按下后退按钮,数据就会被删除。

ViewC1< = ViewC2

1 个答案:

答案 0 :(得分:2)

一种解决方案是将字符串存储在单个字符串中。

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