我有一个主视图控制器和一个'首选项'视图控制器。
首选项视图控制器上有一个“保存”按钮。
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 = @"";
}
答案 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更改为属性视图控制器和主视图控制器的类名。