2010-07-15 81 views
2

我觉得这里的问题是,我想打电话给一个mediaPicker和不支持其他方向......UIPopoverController力量iPad变成纵向方向

没有人对此有一个解决?

这里是我当前的代码:

- (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; 
} 

回答

3

此代码过于复杂。首先以模态方式呈现媒体选择器,然后将其呈现为popover;为什么?在弹出窗口中,在呈现之前将其填充到导航控制器中;为什么?在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]; 

,在任何方向上工作,甚至生存旋转,而酥料饼被显示。

+0

我实际上已经意识到了我的方式的错误,但是要感谢让这个马特遇到的任何其他人都清楚! – 2011-02-25 01:07:22

0

所有预先定义的模式控制器支持所有的方向,但必须从根视图控制器提出了他们的方位和旋转正常运行。我的猜测是,你的代码中的“自我”不是根视图控制器。如果可能的话,您可能不得不重新构建代码以使其发生。

我还看到过其他一些黑客可以在不从根视图控制器提交的情况下工作,但他们似乎都在寻求麻烦,比如扩展UIViewController以覆盖interfaceOrientation。

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

+0

奇数。此代码位于我的根视图控制器中:/ – 2010-07-23 03:41:25

+0

如果self确实是根视图控制器,则问题可能是导航栏在其init初始视图控制器中获取mediaPicker(而不是根视图控制器)。将其从mediaPicker更改为self。还要确保不要在根视图控制器(与应用程序委托绑定的应用程序中只有一个控制器)和用作控制器层次结构中某些其他控制器的父项的任何控制器之间混淆。旋转和方向逻辑仅在最高级别工作,不会通过控制器层次结构进行传播。 – 2010-07-23 20:32:15