加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 01:46:29 所属栏目:百科 来源:网络整理
导读:我目前正在使用以下代码尝试在UITextField中传递3个视图控制器之间的文本,这些视图控制器正在查看相同的ViewController.h和ViewController.m文件: - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualT
我目前正在使用以下代码尝试在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自动放置的导航上单击Back按钮,当使用选项卡式视图应用程序时,它将按照预期正常运行ViewC1.但是,如果按下ViewC1上按下ViewC2的按钮,我在UITextField中键入的数据/文本已被删除或重置为空.

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

数据被正确推送EX.

ViewC1 => ViewC2 => ViewC3

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

ViewC1< = ViewC2

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读