我目前正在使用以下代码尝试在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
答案 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];
}
}