缘起:产品出的需求,非要搞一个系统自带UIAlertController控件无法胜任的弹窗,fuck
我各种找资料啊百度啥的,发现很多友军提供了很多参考,然并卵,问题还是没得解决,受其中一个案例的启发,我去继承系统UIAlertController写了一个自定义,说是自定义其实,就是借了UIAlertController的壳,然后自己搞个view,添加到UIAlertController上把系统的覆盖掉,这样UI效果就是你的view了。这真是一个蠢办法,但tm是真的有效,你可以自己放view那这个弹窗还不是想怎么玩就怎么玩,到这里思路基本讲完了。
注意:唯一的注意点就是系统自带UIAlertController的view比较小,如果你自定义的view比较大超出其范围的化,响应链就可能会断了。
我的解决方案是:把自定义的view的大小再赋给这个UIAlertController的view;
- (void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
self.authV.center = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2);
}
-(AuthHUD *)authV{
if (!_authV) {
_authV = (AuthHUD *)[[NSBundle mainBundle] loadNibNamed:@"AuthHUD" owner:nil options:nil].firstObject;
_authV.delegate = self;
self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, _authV.frame.size.width, _authV.frame.size.height);
[self.view addSubview:self.authV];
}
return _authV;
}
因为我也没找到好方法去处理这种父视图的父视图(UIAlertController的view还是系统分配的,如果你去自己代码分配感觉就太冗余了)断层了的情况
网友评论