iOS通用二进制 - 切换ModalPresentationStyle

时间:2012-07-17 17:01:15

标签: ios ipad uinavigationcontroller switch-statement uimodalpresentationstyle

我经常为iPhone做应用程序;今天我尝试为应用程序创建一个界面(通用二进制文件)。 问题是我有几个控件的屏幕,我想用UIModalPresentationFormSheet调整界面。但是在使用这种演示的屏幕后,我想切换回全屏(使用相同的导航控制器)。

最初在iPhone上我有UINavigationController - >子控制器。 由于它是相同的类控制器,我想为iPad保留类似的架构。 目前我做了以下几点 UINavigationController - > ModalController - > UINavigationController - >子控制器 但如上所述,子控制器应该能够从FormSheet切换到全屏,导航栏位于顶部。 我正在使用故事板。

据我所知,我对解释不太满意,这里有一个截图,应该澄清我的问题:https://dl.dropbox.com/u/9858108/stack_overflow_iPad_nav_issue.jpg

1 个答案:

答案 0 :(得分:0)

好的,我找到了一个肮脏的解决方案,但解决了这个问题。 我有以下配置 NavigationController - > UIViewController - [模态] - > UINavigationController - > UIViewController1 - [推送] - > UIViewController2(查看上面的截图)。

现在的想法是调整ModalView的大小(我强制横向模式,因此不支持纵向,但您可以轻松修改代码)。我有一个包含有用方法的单例类,我称之为AppKit。 在AppKit.m中:

#pragma mark - Window functions (modal, ...)

/**
 * Cette méthode redimmensionne une modal view en type PaperSheet.
 * Utilisé dans le viewDidAppear du controller enfant.
 * Permet de mettre des modal view en fullscreen.
 *
 * @param id viewController Le viewController parent
 */
- (void)resizeModalToPaperSheet:(id) viewController {
    // Adaptation de la taille de la fenêtre pour iPad
    if (isIPad) {
        [viewController navigationController].view.superview.center = CGPointMake(0.0f, 0.0f);
        [viewController navigationController].view.superview.frame = CGRectMake(84.0f, 242.0f, 540.0f, 540.0f);
    }
}

/**
 * Cette méthode redimmensionne une modal view en type FullScreen.
 * Utilisé dans le viewDidAppear du controller enfant.
 * Permet de mettre des modal view en fullscreen.
 *
 * @param id viewController Le viewController parent
 */
- (void)resizeModalToFullScreen:(id) viewController {
    // Adaptation de la taille de la fenêtre pour iPad
    if (isIPad) {
        [viewController navigationController].view.superview.center = CGPointMake(0.0f, 0.0f);
        [viewController navigationController].view.superview.frame = CGRectMake(20.0f, 0.0f, 754.0f, 1024.0f);
    }
}

现在在我的子视图控制器中,我必须调用该方法两次(否则当你按回模态视图的大小时,必须将它放在上一个控制器中,所以你必须将它放在viewDidAppear中)。

ViewController 1(PaperSheet大小):

-(void) viewWillAppear:(BOOL)animated {
    [[AppKit sharedInstance] resizeModalToPaperSheet: self];
}

-(void) viewDidAppear:(BOOL)animated {
    [[AppKit sharedInstance] resizeModalToPaperSheet: self];
}

ViewController 1(全屏大小):

-(void) viewWillAppear:(BOOL)animated {
    [[AppKit sharedInstance] resizeModalToFullScreen: self];
}

-(void) viewDidAppear:(BOOL)animated {
    [[AppKit sharedInstance] resizeModalToFullScreen: self];
}

它的效果非常好;我可以轻松地在全屏和PaperSheet之间切换。 现在还有一个问题:在故事板上,视图仍然很小,并且在内部添加内容并不容易。所以你必须这样做: 1 /在故事板中,单击视图控制器,该控制器为小(框图标) 2 /在属性面板上,将大小设置为iPad全屏

希望这会有所帮助,欢迎任何关于如何改进代码的评论:)