2012-01-18 93 views
1

在我的模態視圖控制器我有包括模式視圖控制器:方法

[self dismissModalViewControllerAnimated: YES]; 

在呈現視圖控制器我重寫dismissModalViewControllerAnimated一個按鈕的處理方法:如下:

-(void) dismissModalViewControllerAnimated: (BOOL)animated 
{ 
    NSLog(@"dismiss"); 
    [super dismissModalViewControllerAnimated: animated]; 
} 

當按鈕被觸摸時,按鈕處理方法被調用,但dismissModalViewControllerAnimated:override似乎沒有被調用:NSLog(@「dismiss」);語句不會被調用,並且方法內的斷點不會被觸發。

我試圖

[[self presentingViewController] dismissModalViewControllerAnimated: YES]; 

但也不能工作。但是,模態視圖控制器不會被解僱。

任何想法可能會出錯?

回答

0

呈現模態視圖控制器的代碼包含在UIViewController中,該UIViewController又包含在UINavigationController中。當我打電話

[[self presentingViewController] dismissModalViewControllerAnimated: YES]; 

[self dismissModalViewControllerAnimated: YES]; 

解僱消息被髮送到的UINavigationController對象。

2

這通常是通過聲明您的呈現視圖控制器作爲您的模態視圖控制器的代表來處理。模態VC然後在呈現VC中調用委託方法來消除其創建的模態轉換。

實施例:

模態VC.h:

@protocol ModalViewControllerDelegate 
-(void)dismissMyModalViewController; 
@end 

模態VC.m:

// When you want to dismiss the Modal VC 
[delegate dismissMyModalViewController]; 

呈現VC.h:

// Make sure to #import ModalVC.h 
@property (nonatomic, retain) id <ModalViewControllerDelegate> delegate; 

呈現VC.m :

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

這哪裏是委託財產,它實現什麼協議?我無法在UIViewController,UIResponder或NSObject中找到委託屬性。 – 2012-01-18 17:11:45

+0

您可以添加您自己的委託方法,而不是委託屬性。我將在答案中提供一個粗略的例子。請等一下。 – 2012-01-18 17:24:08

+0

我很感謝您花時間回答。我明白你現在在說什麼,但我不明白這一點。這似乎是一個複雜的方式傳遞給模態VC指向演示VC的指針。無論如何,你會從我的回答中看到,問題是解僱消息被髮送到導航控制器,而不是它包含的UIViewController。 – 2012-01-18 21:08:40

2

Programming iOS 6, by Matt Neuburg

在iPad上,當呈現視圖控制器的modalPresentationStyle是UIModalPresentationCurrentContext,決定必須要做出什麼視圖控制器應該是呈現視圖控制器的presentingViewController。這將決定什麼視圖將被呈現的視圖控制器的視圖所取代。這個決定涉及另一個UIViewController屬性definePresentationContext(BOOL)。從發送presentViewController:animated:completion:的視圖控制器開始,我們走上父視圖控制器鏈,查找一個definePresentationContext屬性爲YES的視圖控制器。如果我們找到一個,那就是那個;它將是presentationViewController,它的視圖將被呈現的視圖控制器的視圖所取代。如果我們找不到一個,事情就好像所呈現的視圖控制器的modalPresentationStyle是UIModalPresentationFullScreen一樣。

TL; DR
1.設置definesPresentationContext到真正所需presentingViewController
2.設置modalPresentationStyleUIModalPresentationCurrentContext所需presentedViewController

相關問題