如何从另一个视图控制器IBAction引用主视图控制器TextField?

时间:2013-02-10 23:05:37

标签: objective-c

我有一个主视图控制器和一个'首选项'视图控制器。 首选项视图控制器上有一个“保存”按钮。 IBAction位于ViewController.m主文件中。

将首选项保存到NSUserDefaults后,IBAction会弹回主视图控制器。

此处的最后一项操作是“清除”主视图控制器窗口中的UITextField之一。

问题是,我似乎无法弄清楚如何简单地引用该主视图控制器。

在VisualBasic中我们会说:Window1.finalTextField.text =“”;

找到'Window1'的obj-c相当于什么? 我已经尝试过ViewController的子类,但这似乎只适用于其他 Windows,而不适用于主视图控制器。

最后一行代码不起作用: self.finalTextField.text = @“”;

- (IBAction)savePrefButton:(id)sender
    {
    int yPref = prefYsegmentedControl.selectedSegmentIndex;
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setInteger:yPref forKey:@"yPref"];
    [defaults synchronize];

    NSLog(@"Data saved");

    [self.navigationController popViewControllerAnimated:YES];

    self.finalTextField.text = @"";
}

1 个答案:

答案 0 :(得分:0)

如果finalTextField在主视图控制器中被定义为IBOulet,则只能通过它的名称从该视图控制器中访问它:

[finalTextField setText:@""];

当然一定要将变量链接到IB中的文本字段。

如果要在主视图控制器上访问finalTextField,请从首选项视图控制器中获取,然后您需要1)在主视图控制器上创建一个属性以公开该变量,并且2)传递一个引用您的首选项查看主视图控制器的控制器。

例如在属性视图控制器.h:

MainViewController *mainViewController;

@property (nonatomic, weak) MainViewController *mainViewController;

然后在属性视图控制器.m:

[self.mainViewController.finalTextField setText:@""];

然后当您按下segue(在主视图控制器中)时,请确保将参考设置为:

在prepareForSegue中:

if([segue.identifier isEqualToString:@"XXXX"])
{    
    PropertyViewController *propertyViewController = segue.destinationViewController;
    propertyViewController.mainViewController = self;
}

注意:将PropertyViewController和MainViewController更改为属性视图控制器和主视图控制器的类名。