【iOS开发-106】UIPopoverController,[UIPopoverController dealloc] reached while popover is still visible

(1)UIPopoverController是iPad特有的弹框类似的类,它没有视图,因为直接继承自NSObject,所以在初始化的时候需要设置内容控制器。如下:

-(UIPopoverController *)titlePop{
    if (_titlePop==nil) {
        UITableViewController *tableVc=[[UITableViewController alloc]init];
        _titlePop=[[UIPopoverController alloc]initWithContentViewController:tableVc];
    }
    return _titlePop;
}

(2)UIPopoverController有2种使用方法,一种是围绕BarButtonItem的,一种是围绕Rect的,当然Rect的范围很广。如下:

-(void)menuClick:(UIBarButtonItem *)sender{
    //直接围绕BarButtonItem的
    [self.menuPop presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

-(void)titleClick:(UIButton *)btn{
    //注意rect和inView的关系
    [self.titlePop presentPopoverFromRect:btn.frame inView:btn.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    //[self.titlePop presentPopoverFromRect:btn.bounds inView:btn permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

(3)UIPopoverController还有一些其他属性,比如是否可见等。

//还有以下方法。设置内容视图控制器
//[self.menuPop setContentViewController:nav animated:YES];
        
//设置popover大小
//[self.menuPop setPopoverContentSize:CGSizeMake(100, 100)];
//self.menuPop.popoverContentSize=CGSizeMake(100, 100);
        
//设置点击时,popover不消失(默认是点击popover外的任何地方就消失)
//[self.menuPop setPassthroughViews:@[self.btn]];
//self.menuPop.passthroughViews=@[self.btn];

当然,最实用的就是上面的那个设置大小的属性,但是如果设置大小需要在内容视图控制器中设置呢?就不能实用setPopoverContentSize,需要用到如下的属性:

self.preferredContentSize=CGSizeMake(100, 100);

(4)解决方案:-[UIPopoverController dealloc] reached while popover is still visible.

原因:创建的popover控制器是局部变量,一个花括号执行完毕{}就销毁了,所以会出现问题。

解决办法:把局部变量变成全局变量即可。定义如下,然后使用的时候用self.helloPop即可:

@interface ViewController ()
@property(nonatomic,strong) UIPopoverController *helloPop;
@end

注意:在iOS8中已经不会出现这个错误,即只是在花括号中定义的局部变量,但是不会报错。这个错误一般是在iOS7及以下系统。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值