我当前正在使用以下代码尝试在查看相同 ViewController.h 和 ViewController.m 文件的 3 个 View Controller 之间传递 UITextField 中的文本:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"NameOfSegue"]) {
ViewController *ibcVC = segue destinationViewController;
ibcVC.myTextField = self.myTextField;
}
}
我有 3 个 View Controller ,按以下顺序链接:ViewC1 => ViewC2 => ViewC3。
我的 UITextField 位于 ViewC2 上。
例如,当我单击 ViewC2 上的按钮(在 ViewC3 中推送)时,它会将数据很好地传递到 ViewC3。但是,假设我当前在 ViewC2 上,我在 UITextView 中输入一些内容,然后单击导航上的后退按钮(在使用选项卡式 View 应用程序时 Xcode 自动将其放在那里),这将需要我到 ViewC1 正如预期的那样。但是,如果我按下 ViewC1 上的按钮(在 ViewC2 中推送),我在 UITextField 中输入的数据/文本将被删除或重置为 null。
所以基本上这是使用轻微数字视觉的问题:
数据已正确推送。
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
然后,您可以根据需要获取所有 View 并设置字符串,如下所示:
- (void)viewWillAppear:(BOOL)animated
{
[myTextField setText:[[SharedStrings sharedString] getString]];
[super viewWillAppear:animated];
}
-(void)textFieldDidEndEditing:(UITextField *)textField{
if (textField == enterInfoTF) {
[[SharedStrings sharedString] setString:textField.text];
}
}
关于Xcode: Storyboard选项卡式应用程序来回传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661246/