UIPopoverPresentationController在iPhone上显示全屏模式

时间:2016-03-28 06:38:47

标签: ios objective-c iphone uimodalpresentationstyle

在iPad UIPopoverPresentationController工作正常,但在iPhone上它始终显示完整窗口模式弹出窗口。我正在使用以下代码:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MySecondViewController *contentVC = [storyboard instantiateViewControllerWithIdentifier:@"Pop"];
contentVC.modalPresentationStyle = UINavigationControllerOperationPop; // 13
UIPopoverPresentationController *popPC = contentVC.popoverPresentationController; // 14
contentVC.popoverPresentationController.sourceRect =CGRectMake(100, 130, 280, 230);
self.navigationController.preferredContentSize = CGSizeMake(200, self.parentViewController.childViewControllers.lastObject.preferredContentSize.height-100);
//self.showPop.frame; // 15
contentVC.popoverPresentationController.sourceView =
self.showPop; // 16
popPC.permittedArrowDirections = UIPopoverArrowDirectionAny; // 17
popPC.delegate = self; //18
[self presentViewController:contentVC animated:YES completion:nil];

-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
    return UIModalPresentationNone;
}

2 个答案:

答案 0 :(得分:4)

在ViewController.h中首先创建UIPopoverPresenatationController的属性。

$(document).ready(function(){   
    $('#check_network_button').click(function(){
        if( $("#network_octet1_text").val()==octet[1] && $("#network_octet2_text").val()==octet[5] && $("#network_octet3_text").val()==octet[6] && $("#network_octet4_text").val()==octet[7] ){

        } else {
            $("#network_ok_text").val("NO");
        }
    });
    $('#check_firsthost_button').click(function(){
        if( $("#firsthost_octet1_text").val()==octet[1] && $("#firsthost_octet2_text").val()==octet[8] && $("#firsthost_octet3_text").val()==octet[9] && $("#firsthost_octet4_text").val()==octet[10] ){

        } else {
            $("#firsthost_ok_text").val("NO");
        }
    });
    $('#check_lasthost_button').click(function(){
        if( $("#lasthost_octet1_text").val()==octet[1] && $("#lasthost_octet2_text").val()==octet[11] && $("#lasthost_octet3_text").val()==octet[12] && $("#lasthost_octet4_text").val()==octet[13] ){

        } else {
            $("#lasthost_ok_text").val("NO");
        }
    });
    $('#check_broadcast_button').click(function(){
        if( $("#broadcast_octet1_text").val()==octet[1] && $("#broadcast_octet2_text").val()==octet[14] && $("#broadcast_octet3_text").val()==octet[15] && $("#broadcast_octet4_text").val()==octet[16] ){

        } else {
            $("#broadcast_ok_text").val("NO");
        }
    });
    $('#checkall_button').click(function(){

    });
});

然后显示PopOverPresentationcontroller

 @property(nonatomic,retain)UIPopoverPresentationController *dateTimePopover8;

你一定注意到我们正在呈现View Controller而不是呈现popOver.So我们也必须以新的方式隐藏它。当我们点击屏幕时它会自动隐藏。

 UINavigationController *destNav = [[UINavigationController alloc] initWithRootViewController:dateVC];/*Here dateVC is controller you want to show in popover*/
            dateVC.preferredContentSize = CGSizeMake(280,200);
            destNav.modalPresentationStyle = UIModalPresentationPopover;
            _dateTimePopover8 = destNav.popoverPresentationController;
            _dateTimePopover8.delegate = self;
            _dateTimePopover8.sourceView = self.view;
            _dateTimePopover8.sourceRect = [sender frame];
            destNav.modalPresentationStyle = UIModalPresentationPopover;
            destNav.navigationBarHidden = YES;
            [self presentViewController:destNav animated:YES completion:nil];

我们必须在实现文件中实现UIPopoverPresenatationController的委托。在实现文件中写下委托方法。

-(void)hideIOS8PopOver
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

答案 1 :(得分:2)

  

Popover控制器仅适用于iPad设备。

编辑:正如Soberman所述,自iOS 8以来,可以使用公共API在iPhone上展示弹出窗口,因此这个答案可能不再适用了。

正如Apple关于UIPopoverController的文档中所述:

Popover控制器仅适用于iPad设备。 因此,遗憾的是,无法在iPhone应用程序中使用此类。但是UIPopoverController提供了一些定制的第三方实现功能,可以添加iPhone支持等等。例如,请参阅https://github.com/50pixels/FPPopover

编辑:还有另一个高度可自定义的popover实现,适用于值得签出的iPhone / iPad:https://github.com/nicolaschengdev/WYPopoverController