2011-04-02 100 views
0

我有以下代碼視圖 - 控制不會解僱

- (void) viewWillAppear:(BOOL)animated 
{ 
    NSLog(@"dismiss view"); 
    [self dismissModalViewControllerAnimated:YES]; 
} 

此打印駁回觀點,但不會執行該視圖解僱代碼。

在IBAction中沒有觸發器的代碼中,視圖能否被解散?

爲什麼這不會執行?

+0

你能發表介紹模態視圖控制器的代碼嗎? – 2011-04-02 22:20:57

+0

林不知道是否是這樣,因爲我有一個叫做closeView的方法,當按下「後退」按鈕時我會調用它,這會正確地解除視圖。如果我在viewWillAppear方法中調用closeview方法,它不會執行。在viewWillAppear中調用視圖時是否有可能不被解僱? – jarryd 2011-04-02 22:25:16

+0

爲什麼你會在其viewWillAppear方法中忽略視圖? – ennuikiller 2011-04-02 22:25:16

回答

1

你可能有更好的運氣把代碼放到viewDidAppear,而不是viewWillAppear。後者傾向於在任何動畫開始時被調用,例如模式開始滑出屏幕;當動畫完全結束時,前者往往會被調用。請注意,即使這種策略起作用,您最終可能會產生一種奇怪的效果,從而看到兩個模態一個接一個地滑落;我想你只是想要一個滑落效果。

如果您忽略「降低」模式對話框(第一個按下的對話框),並且不打擾解除最頂層的對話框會發生什麼?

也可以考慮在關閉模態視圖控制器時注意animated參數。當您遇到像您這樣的問題時,動畫或不動畫的不同組合可以產生不同的效果。

如果您發佈了更完整的代碼示例,我們可以給出更好的答案!

+0

完美,謝謝。 :)將代碼移動到viewDidAppear,它的工作原理。 – jarryd 2011-04-03 00:00:11

0

嘗試在第二次解僱時稍稍延遲。

- (void) viewWillAppear:(BOOL)animated 
{ 
    NSLog(@"dismiss view"); 
    [self performSelector:@selector(delayedDismiss) withObject:nil afterDelay:0.5]; 
} 

-(void)delayedDismiss{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 
+0

謝謝,這個工程。只是看起來有點奇怪:P – jarryd 2011-04-02 22:48:08

+0

我不特別推薦這個策略 - 放任意拖延使某些工作成爲代碼異味。通常有更好的方法。 (鑑於OP給出的信息量有限,確切的方式很難知道。) – occulus 2011-04-02 23:15:21

+0

我認爲這些調用是重疊的,並且相同的模式視圖控制器可以獲得這兩個調用。第二個需要時間成爲響應者。只是一個解決方案,我知道不是更好的,但它更容易。我認爲你必須審查你的實施。 – Jorge 2011-04-02 23:16:56

相關問題