2013-07-29 108 views
0

這可能很簡單。我的xib中的UISwitch連接到一個IBOutlet「開關」。然而,當我創建viewController,我想檢查一個變量是YES/NO,並且開關應該是正確的值。UISwitch沒有反應

ViewController *vc = [[ViewController alloc] init]; 
if(variable ==YES){ 
    [vc.switch setOn:YES]; 
}else{ 
    [vc.switch setOn:NO]; 
} 

但是它總是沒有選中。我可能做錯了什麼?我重複檢查了與IBOutlet的連接

回答

0

您已經創建了ViewController,但未顯示它。所以loadView從來沒有被調用,你的.switch是零。 試試這個:

ViewController *vc = [[[ViewController alloc] init] autorelease]; 
[self presentViewController:vc 
        animated:YES 
       completion:^(){ 
    vc.switch.on = variable; 
}]; 
+0

如果他不想呈現它呢?如果vc應該被推送,該怎麼辦? – Abizern

+0

loadView在pushViewController中被調用,所以你可以在推視圖控制器後設置UISwitch的值。我無法在你的回答中添加評論,但vc.switch.on =變量等於[vc.switch setOn:variable] –

3

您沒有調用正確的方法; UISwitch does not'have a setOn method。它有一個on屬性和一個senOn:animated:方法。

之一:

ViewController *vc = [[ViewController alloc] init]; 
vc.switch.on = variable 

或:

ViewController *vc = [[ViewController alloc] init]; 
[vc.switch setOn:variable animated:YES]; 

注意,你已經檢查對一個BOOL,我展示瞭如何做到這一點沒有不必要的檢查。

1

這是最常見的問題,新的開發人員。其實我有同樣的問題一次。那時我不知道發生這種事情的原因。我想現在我很清楚這樣的問題。

讓我給你一些提示。

  1. 你不應該呈現或推視圖控制器之前訪問任何UIView控制。您可以在展示/推送後訪問UIView控件。
  2. 您也可以通過設置布爾值來實現此目的。創建deafultSwitchStatus布爾屬性,因爲它的布爾類型,這個值將在viewDidLoad之前保持內存。並且您可以將此狀態分配到您的UISwitch對象中viewDidLoad.

總之。 UIViewviewDidLoad方法之前未創建/加載控件,並且在預置/推動任何控制器之後調用viewDidLoad。這意味着如果您在展示/推送前訪問,則您的控件無效。這些控件不會影響您的代碼,因爲它會被覆蓋。

希望我解釋清楚:)