2013-02-10 56 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

相關問題