2012-01-24 160 views
43

我遇到了問題,dismissViewControllerAnimated方法沒有關閉視圖。dismissViewControllerAnimated被調用,但ViewController不被解僱

什麼是應用這裏發生的是:在ItemViewController

  • 細胞被選中。
  • View是版到ItemDetailViewController和細節,通過委託
  • 用戶選擇「完成」,並通過委託發送的事件ItemViewController

所有這些作品除了被關閉發送對於View並不排斥,沒有錯誤。任何人都可以看到什麼是錯的?

- (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller 
{ 
    NSLog(@"Controller: %@", controller); 
    // Returns - Controller: <ItemDetailViewController: 0x6b68b60> 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

如果您發送'dismissModalViewControllerAnimated:'而不是? – 2012-01-24 15:03:23

+0

'self'如何在屏幕上被推入? – Nekto

+0

@Vince:我確實嘗試了,但如果賽格是'推',它似乎不起作用。 –

回答

65

如果您撥打[controller.navigationController popViewControllerAnimated:YES]而不是?

對於這個問題,如果你打電話給[controller dismissViewControllerAnimated:YES completion:nil]而不是自己打電話呢?

+4

+1 - '推',所以'流行' – 2012-01-24 15:12:29

+1

謝謝,這工作很好!非常感激。 –

+8

爲我工作的確切語法:[self.navigationController popViewControllerAnimated:YES]; – Dan

10

答案就在本頁面:當你沒有navigationcontroller dismissviewcontrolleranimated-vs-popviewcontrolleranimated

dismissViewController使用。 很可能您正在使用導航控制器,然後使用 self.navigationController popViewController來代替。

還注意到LEMAX的他的話:使用NULL,爲completionhandler

+0

謝謝,它看起來像零是我的問題的地方 – John

+2

對非對象指針使用NULL。所以你不應該在這裏使用NULL。 –

+2

MacTypes.h擁有#define nil NULL ... –

4

我在iOS5中有一個問題,在標準完成回調是不允許的觀點完全解僱(不nill只有當前推動的觀點情態)

[controller dismissViewControllerAnimated:YES completion:^ { 
    // 
}]; 

解決方案的iOS5是不是有一個回調:

[controller dismissViewControllerAnimated:YES completion:nil]; 
3

有一個問題,其中調用dismissViewControllerAnimated解除了UIViewController中的鍵盤,但不是視圖本身。 - ItemViewController - > ItemDetailViewController (被推navigationController

[self dismissViewControllerAnimated:NO completion:nil]; 
[self dismissViewControllerAnimated:YES completion:nil]; 

瞬間一個鍵盤,然後動畫一個控制器

+0

令人驚歎,在此之前嘗試了一切! –

0

你的情況是:

通過使用兩個電話解決了它) Self.dismissViewController(..)關閉顯示在自身上的視圖控制器(在這種情況下,它是ItemViewController)。在這裏,你沒有提出任何風險投資超過自己,而是你推動了一個新的風險投資超過導航堆棧。所以,正確的方法來解僱ItemDetailViewController將是

self.navigationController.popViewController(true)。請閱讀dismissViewController(....)的描述以獲得更多的清晰度。