2013-06-05 17 views
0

我想介紹一種模式視圖控制器,不會調暗它背後的內容。只需使用標準的presentViewController。只是將視圖控制器的子視圖添加到父視圖中會導致問題。是否可以在不調暗背景的情況下在iPad上呈現模態視圖控制器?

+3

這似乎是一個潛在的-UX混亂,由於缺乏與一般模態對話框的一致性。 –

+2

你爲什麼要這樣做?模態視圖控制器的目的是接管整個屏幕並讓用戶在回到應用程序的主流程之前處理任何你想要他們做的事情。這是通過覆蓋整個屏幕或調暗屏幕的未覆蓋部分(在iPad上)完成的。 – rdelmar

+0

我認爲這是一個特殊情況值得特例。 – kyleplattner

回答

0

看看UIModalPresentationStyle也許吧?

typedef NS_ENUM(NSInteger, UIModalPresentationStyle) { 
UIModalPresentationFullScreen = 0, 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2 
UIModalPresentationPageSheet, 
UIModalPresentationFormSheet, 
UIModalPresentationCurrentContext, 
#endif 
}; 

您可以調用presentViewController:animated:completion:之前指定您的視圖控制器上使用setModalPresentationStyle:模式呈現的類型。

+2

這是如何回答關於不調光屏幕其餘部分的問題? – rmaddy

+0

我不相信任何這些風格都能完成我所追求的。 – kyleplattner

+0

@kyleplattner從技術上講,使用「FullScreen」會這樣做,因爲整個屏幕都被覆蓋了,所以沒有任何東西顯得模糊。 :) – rmaddy

0

最好的辦法是增加一個視圖作爲子視圖而不是模態視圖控制器。我不知道你的具體用途,但從它的聲音來看,邏輯應該在同一個控制器中。

myControllerThatWasModal.view.layer.opacity = 0.0f; 
myControllerThatWasModal.view.hidden = YES; 
[self.view addSubview:myControllerThatWasModal.view]; 
[UIView animateWithDuration:1.0 animations:^{ 
    myControllerThatWasModal.view.layer.opacity = 1.0f; 
}]; 

這是從內存中寫入所以請原諒任何錯誤,也沒有,爲了這個工作,你必須在視圖控制器,它會覆蓋你的「莫代爾」視圖控制器的一個實例。

+0

我認爲問題在於管理子視圖,而不是將視圖控制器推到導航控制器上。那麼使用presentViewController沒有辦法做到這一點? – kyleplattner

+0

這是正確的,它是更多的工作管理子視圖,但它會給你所需的功能。沒有辦法讓模態視圖控制器做你想做的事情;有很強的背景知識。從用戶體驗的角度來看,背景很有意義,它可以直觀地向用戶顯示他們需要關注的位置,顯示在後臺的視圖控制器上不會接收到觸摸,並且通常看起來不那麼混亂。 –

0

試試這個:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    // remove the dimming view if needed, when this view controller will appear as modal 
    id <UIViewControllerTransitionCoordinator> transitionCoordinator = self.transitionCoordinator; 
    if (transitionCoordinator.presentationStyle != UIModalPresentationNone) { 
     for (UIView *transitionContainerSubview in transitionCoordinator.containerView.subviews) { 
      if ([NSStringFromClass([transitionContainerSubview class]) isEqualToString:@"UIDimmingView"]) { 
       transitionContainerSubview.hidden = YES; 
      } 
     } 
    } 
} 
相關問題