【问题标题】:Set UITextField text property in prepareForSegue在 prepareForSegue 中设置 UITextField 文本属性
【发布时间】:2013-08-08 22:12:32
【问题描述】:

我的 ViewController1 中有一个 textField。我的 ViewController2 有一个 push segue,它也有一个 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 不起作用?

【问题讨论】:

  • NSLog self.textField.text

标签: ios objective-c xcode uitextfield segue


【解决方案1】:

您不能在准备转场中设置UITextField(以及任何其他组件,如UILabelUITextView)的文本,因为最近分配的控制器的所有视图组件都尚未初始化(此时,它们都是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;
}

【讨论】:

    【解决方案2】:

    检查并查看“VCT.textField”此时是否不为零。我怀疑你会发现它是零。

    您要么需要通过“@property (strong) IBOutlet UITextField * textField”公开它,要么需要将字符串存储在其他地方(例如“NSString”属性?),然后在视图完全加载时加载文本字段。

    【讨论】:

      猜你喜欢
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      相关资源
      最近更新 更多