UIPopoverController强制iPad进入纵向方向

时间:2010-07-15 16:26:41

标签: iphone uipopovercontroller mpmediapickercontroller

我认为这里的问题是我试图调用mediaPicker并且不支持其他方向......

有没有人对此有解决方法?

这是我目前的代码:

- (IBAction)openMediaPicker:(id)sender {
    MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAnyAudio];
mediaPicker.delegate = self;
mediaPicker.allowsPickingMultipleItems = YES; // this is the default
    mediaPicker.modalPresentationStyle = UIModalPresentationPageSheet;
    //mediaPicker.prompt = @"Select items to play";
[self presentModalViewController:mediaPicker animated:YES];
[mediaPicker release];

    // Init a Navigation Controller, using the MediaPicker as its root view controller
    UINavigationController *theNavController = [[UINavigationController alloc] initWithRootViewController:mediaPicker];
    [theNavController setNavigationBarHidden:YES];

    // Init the Popover Controller, using the navigation controller as its root view controller
    popoverController = [[UIPopoverController alloc] initWithContentViewController:theNavController];

    // Make a rect at the size and location of the button I use to invoke the popover
   CGRect popOverRect = chooseMusicButton.frame;

    // Specify the size of the popover
    CGSize MySize = CGSizeMake(520.0, 720.0);

    [popoverController setPopoverContentSize:MySize animated:YES];

    // Display the popover
    [popoverController presentPopoverFromRect:popOverRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    popoverController.delegate = self;
}

2 个答案:

答案 0 :(得分:3)

此代码过于复杂。首先,您以模态方式呈现媒体选择器,然后将其呈现为弹出窗口;为什么?在弹出窗口中,您在呈现之前将其填充到导航控制器中;为什么?在iPad上展示媒体选择器比这简单得多:

MPMediaPickerController* picker = 
    [[[MPMediaPickerController alloc] init] autorelease];
picker.delegate = self;
UIPopoverController* pop = 
        [[UIPopoverController alloc] initWithContentViewController:picker];
self.currentPop = pop;
[pop presentPopoverFromRect:[sender bounds] inView:sender
        permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
[pop release];

它可以在任何方向工作,甚至可以在弹出窗口显示时保持旋转状态。

答案 1 :(得分:0)

所有预定义的模态控制器都支持所有方向,但它们必须从根视图控制器中呈现,以使它们在方向和旋转中正确运行。我的猜测是代码中的“self”不是根视图控制器。如果可能的话,您可能需要重新设计代码以使其成为可能。

我已经看到其他黑客在没有从根视图控制器呈现的情况下使其工作但是它们似乎都在寻找麻烦,例如使用类别扩展UIViewController以覆盖interfaceOrientation。

如果您可以从根视图控制器中呈现它,它将是最简单和最干净的但我意识到它并非总是可能(例如,它是在您提供给第三方应用程序嵌入的库中)。