2013-02-10 59 views
0

我有一个主视图控制器和一个'首选项'视图控制器。 首选项视图控制器上有一个“保存”按钮。 IBAction位于主ViewController.m文件中。如何从另一个View Controller IBAction引用主视图控制器TextField?

将首选项保存到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 = @""; 
} 

回答

0

如果finalTextField被定义为IBOulet在主视图控制器比你可以简单地通过它的名字从该视图控制器内访问:

[finalTextField setText:@""]; 

当然一定要变连接起来到IB的文本字段。

如果你想访问你的主视图控制器上的finalTextField,从你的首选项视图控制器,然后你需要1)在你的主视图控制器上创建一个属性来公开这个变量,2)传递一个对你的首选项视图的引用控制器为您的主视图控制器。

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

MainViewController *mainViewController; 

@property (nonatomic, weak) MainViewController *mainViewController; 

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

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

然后,当你把你的赛格瑞(主视图控制器)可以肯定的设置参考回:

在prepareForSegue:

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

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

+0

可能值得一提的是,如果mainViewController对propertyViewController保持强引用或保留引用,则此方法可能会创建保留周期。为了避免这种情况,你可以使用委托模式。 – isaac 2013-02-10 23:55:27

+0

finalTextField是一个IBOutlet:@property(retain,nonatomic)IBOutlet UITextField * finalTextField; 但以这种方式访问​​它不起作用。 我有一个ViewController.h和一个ViewController.m文件。 我在回答你的答案的第二部分,但最后一个条目对我来说没有意义。那去哪了? “propertyViewController.mainViewController = self;” – mstace 2013-02-11 00:13:47

+0

在您创建并初始化您的主视图控制器中的属性视图控制器后,就会马上进行。想必你有一个地方,你初始化它,并推到导航控制器。在将其推入导航控制器之前,请将参考设置回主体,以便您可以在属性视图控制器中使用参考。 – Joel 2013-02-11 01:35:28

相关问题