shmxybfq / TFPopup

🚀🚀🚀TFPopup不生产弹框,它只是弹框的弹出工🚀🚀🚀默认支持多种动画方式一行调用,支持完全自定义动画.
MIT License
244 stars 31 forks source link

设置disuseBackgroundTouchHide为NO,点击背景之后,也不销毁 #9

Closed tanjieaa closed 5 years ago

tanjieaa commented 5 years ago

设置disuseBackgroundTouchHide为NO,点击背景弹窗消失,popView也不销毁的,调用tf_hide可以销毁

shmxybfq commented 5 years ago

disuseBackgroundTouchHide=NO,为默认值。点击背景以后也是调用的tf_hide方法。我试了一下发现可以释放,看代码也没什么问题。可以把你调用的代码贴出来参考一下吗?

tanjieaa commented 5 years ago

TFPopupParam *param = [TFPopupParam new]; param.duration = 0.2; param.disuseBackgroundTouchHide = NO;//NO:点击背景消失,YES:点击不消失 param.backgroundColorClear = NO; self.popView.center = [UIUtil appRootViewController].view.center; CGFloat height = 320.0;

self.popView.size = CGSizeMake(JKScreenWidth*0.75, height);

[self.popView tf_showNormal:[UIUtil appRootViewController].view popupParam:param];
tanjieaa commented 5 years ago
shmxybfq commented 5 years ago

上面的代码我感觉有些疑问: (1)self.popView.center = [UIUtil appRootViewController].view.center;这句代码是不能改变弹框的弹出位置的,弹框的位置和大小需要通过TFPopupParam的 @property(nonatomic,assign)CGSize popupSize; @property(nonatomic,assign)CGPoint offset; 来设置 (2)self引用了popView【self.popView】是不是导致了弹框的不释放?去掉self可以试一下是不是就释放了。 (3)点击背景会自动调用tf_hide方法来把弹框消失掉,也可以手动调用tf_hide让弹框消失掉。 (4)调用tf_observerDelegateProcess监听弹框的弹出过程函数需要在调用tf_showxxx前调用,否则不能监听全部弹框的弹出过程,这个函数返回的DelegateProcess参数是一个枚举,需要根据枚举值去判断弹框调用到了哪个过程,并且这个block是一个多次回调的block。 (5)调用tf_hide 后 框架会自动把相关的view从容器中移除,不需要手动移除。

如果是简单的想让一个view弹出来只需要调用 tf_showxxx 就行,不需要做其他操作,可以试一下如果self不引用是不是还是不销毁~

tanjieaa commented 5 years ago

TFPopupParam param = [TFPopupParam new]; param.duration = 0.2; param.disuseBackgroundTouchHide = NO;//NO:点击背景消失,YES:点击不消失 param.backgroundColorClear = NO; CGFloat height = 320.0; param.popupSize = CGSizeMake(JKScreenWidth0.75, height); JZYIPopView *popView = [[JZYIPopView alloc]init]; [popView dataModel:self.dataModel section:self.section]; popView.selectBtnBlock = ^(BOOL isSava) { if (!isSava) { //[weakSelf hiden]; }else{

        }
    }
    //[popView tf_hide];
};
[popView  tf_observerDelegateProcess:^(UIView *pop, DelegateProcess pro) {

}];
[popView tf_showNormal:[UIUtil appRootViewController].view popupParam:param];

这样用的话,点击背景是销毁的,但是在我定义的selectBtnBlock里面,我要让弹窗消失,怎么调用tf_hide呢?[popView tf_hide]有循环引用警告

tanjieaa commented 5 years ago

外面加了__weak JZYIPopView *view = popView;现在没问题了,点击背景,调用tf_hide都可以销毁了

shmxybfq commented 5 years ago

popView对selectBtnBlock 是强引用,block里面再调用popView一定会循环引用的,你刚才的方法把popView弱引用化可以解决,也可以在block里用weakSelf. popView 调用tf_hide使弹框消失,总之避免循环引用就好。多谢反馈~