iPad开发

0. Device选项对运行的影响

通用: iPhone和iPad正常运行
iPad: 只能运行在iPad上
iPhone: 运行在iPad上会出现黑边情况, 而且默认是按照X2的分辨率显示的
Xcode9默认就是通用, 以后也不建议调整

1. SB实现Popover

Popover指向的有两种类型: UIBarButtonItem(箭头位置会自动指向正确的地方) , 自定义View(会出现默认指向不对的情况)

  1. 如果指向UIBarButtonItem, 只需要连线即可
  2. 如果指向自定义View, 需要设置rect参数
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    
    UITableViewController *tabelVC = segue.destinationViewController;
    
    //iOS9过期了
    //UIPopoverController
    
    //从iOS8开始, UIPopoverPresentationController成为了UIViewController的一个属性.
    //通过这个控制器的属性可以设置相关的参数
    //UIPopoverPresentationController
    UIPopoverPresentationController *popoverC = tabelVC.popoverPresentationController;
    
    //sourceRect: 设置popover指向的位置. 先以sourceView左上角为(0,0)点, 然后根据传入的rect参数值进行位置修正
    //固定写法, 传入bounds即可.
    popoverC.sourceRect = popoverC.sourceView.bounds;
    
    
}

2. 代码实现Popover


#pragma mark - 指向自定义View
- (IBAction)customViewClick:(UIButton *)sender {
    //1. 创建NextVC
    NextTableViewController *nextVC = [NextTableViewController new];
    
    //2. 设置模态的样式 --> 必须先设置style才能设置属性
    nextVC.modalPresentationStyle = UIModalPresentationPopover;
    
    //3. 设置SourceView
    nextVC.popoverPresentationController.sourceView = sender;
    nextVC.popoverPresentationController.sourceRect = sender.bounds;
    //如果是UIBarButtonItem, 需要 设置UIBarButtonItem
    //navC.popoverPresentationController.barButtonItem = sender;
    
        //3.1 方向
    //系统默认是Any, 自己会查找合适的位置来显示. 
    nextVC.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionAny;
    
    //3.2 设置能够穿透的视图
    nextVC.popoverPresentationController.passthroughViews = @[self.clickMeButton];

    //3.3 设置不能点击模态的背景来消失模态视图
    nextVC.modalInPopover = YES;

    
    //4. 模态弹出
    [self presentViewController:nextVC animated:YES completion:nil];
}

3. 兼容iPhone和iPad

popover: 带有箭头指向的弹窗视图
UIPopoverPresentationController: iOS8出现的, 替代原先的UIPopoverController. 能够保证iPhone使用不崩溃, 但是不会默认的出现popover效果

UIPopoverPresentationController: 增加了自适应逻辑. 系统本身的逻辑:如果检测到设备是iPad,就用popover样式, 如果检测到时iPhone,就用全屏的样式

UIPopoverController: 只能用于iPad, 用于iPhone直接崩溃

//3.4 设置代理
nextVC.popoverPresentationController.delegate = self;

#pragma mark - 代理方法
//从协议中中的父协议中拷贝的第一个方法
//设置自适应的样式 --> 不需要自适应的话, 使用None就取消了
//系统本身的逻辑:如果检测到设备是iPad,就用popover样式, 如果检测到时iPhone,就用全屏的样式

//如果公司有自己的弹窗样式, 就需要自定义
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
    return UIModalPresentationNone;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值