好的,我有一個問題,一直沒能找到我做錯了什麼。調用父UIViewControllers函數
我有一個UIVievController
有一個視圖和一些功能和東西。一個是從另一個UIVeiwController
打開(從一個動作表中的按鈕)。看起來像這樣:
PersonalSettings *personalSettings;
-(IBAction) displaySettingsMenu:(id)sender
{
personalSettings = [[PersonalSettings alloc]
initWithNibName:@"PersonalSettings"
bundle:nil];
[self.view addSubview:personalSettings.view];
[SettingsSheet dismissWithClickedButtonIndex:0 animated:YES];
}
這就像一個魅力,我可以在這個視圖使som更新。 當我關閉此視圖時,所有設置都會正確更新並且視圖消失,但是我想要重新加載父項ViewController
(View?),以便我可以看到我所做的新設置。我在父項中有一個void函數,但是我怎樣才能調用它? 當保存按鈕在孩子ViewController
被擊中我刪除這樣的觀點:
[self.view removeFromSuperview];
我從這裏做是調用從父視圖的子視圖更新功能。
我發現了一些代碼,但由於superview沒有出現在列表中,所以除了「superclass」而不是「superview」。看起來是這樣的:
[self.view removeFromSuperview];
MainViewController *Parent = (MainViewController *)self.superclass;
[Parent updateView];
有什麼「魔力」我可以做這樣說:「重載父視圖」?
我希望我可以理解這個問題。 :)
編輯:
真的非常感謝你的gyus,我現在更接近。 我不是100%確定這個代表事物是如何工作的(但),但我接近解決方案。其實,我意識到甚至不需要運行一個方法,只需更新一個標籤。
從子,我寫了這個:
MainViewController* Parent = [[MainViewController alloc] init];
Parent.delegate = self;
Parent.TheLabel.text = @"foo";
...但是這不工作 - 即使它真的發現標籤和每一件事情。如果我從孩子試圖這樣:
NSLog(@"Parent label: %@", Parent.TheLabel.text);
它記錄「父標籤:(null)」。
但是,我現在可以從小孩到達更新功能並運行。問題是這個函數從其他標籤中獲取值(在父視圖中),這是它崩潰的地方 - 當我從子項運行函數時,它們全都是空的。即使他們不是。任何想法爲什麼?
這與你的問題無關,但是當你想顯示一個新的視圖和相關的'UIViewController',你應該使用視圖控制器方法。 ' - (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated'例如。如果只是將控制器視圖添加爲子視圖,則會失去使用視圖控制器免費獲得的所有漂亮內存管理方法。 – kubi
這是一個恥辱我不能標記你的評論作爲修復,這是它!現在父級更新正確,因爲它運行的視圖確實加載。 – gubbfett