我的ViewController1中有一个textField。我有一个push segue到我的ViewController2,它也有一个textField。我需要将ViewController2中的textField.text设置为等于ViewController1中textField中的文本。这是我的代码:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqual:@"ViewController2"])
{
ViewController2 *VCT = [segue destinationViewController];
VCT.title = @"View Controller #2";
VCT.textField.text = self.textField.text;
}
}
标题制定者的工作正常。为什么textField不起作用?
答案 0 :(得分:22)
您无法在准备segue中设置UITextField
(以及UILabel
和UITextView
等任何其他组件)的文本,因为最近分配的控制器的所有视图组件都不是尚未初始化(此时,它们都是nil
),它们仅在呈现viewController时(并且它的视图已加载)。
您必须在显示的viewController中创建一个NSString
属性,然后在另一个视图控制器中的某个位置,如viewDidLoad
,将textField的文本设置为此属性值。
像这样:
在viewController中将呈现另一个viewController:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"ViewController2"])
{
ViewController2 *vc2 = [segue destinationViewController];
vc2.myString = self.textField.text;
}
}
在呈现的viewController里面:
- (void)viewDidLoad
{
[super viewDidLoad];
(...)
self.textField.text = self.myString;
}
答案 1 :(得分:0)
检查并查看此时“VCT.textField
”是否为零。我怀疑你会发现它是零。
您需要通过“@property (strong) IBOutlet UITextField * textField
”公开它,或者您需要将字符串存储在其他位置(例如“NSString
”属性?),然后在视图完全时加载文本字段加载。