BRPickerView
BRPickerView copied to clipboard
PickerView的弹出位置
大佬,请问一下PickerView只能是从底部弹出,整个都显示在底部么,能不能设置高度并居中显示呢?谢谢大佬
可以通过自定义弹窗视图来实现,使用下面方法把滚轮选择器添加上去即可
/// 扩展一:添加选择器到指定容器视图上
/// 应用场景:可将中间的滚轮选择器 pickerView 视图(不包含蒙层及标题栏)添加到任何自定义视图上(会自动填满容器视图),也方便自定义更多的弹框样式
/// @param view 容器视图
- (void)addPickerToView:(nullable UIView *)view NS_REQUIRES_SUPER;
好的,谢谢大佬的回复,那再继续追问一下,那弹出和消失是需要自己处理了是吗?
同时再问一下滚轮选择器添加到指定容器视图上是不需要设置frame么,会自动铺满指定容器?
3、另外使用- (void)addPickerToView:(nullable UIView *)view NS_REQUIRES_SUPER;之后发现顶部的操作按钮不见了,比如“取消”、“确认”以及标题title设置也无效了,这是为什么?
4、同时能不能给作者大佬提个小建议,就是弹出框的位置,能不能进行封装一下,用户可以自定义弹出的位置
说明:
使用addPickerToView 方法只是添加中间的滚轮选择器到自己的自定义视图上,这样的目的是保证组件轻量级和通用性,可以兼容更多的自定义场景。对于一些不常见的定制化需求,都可以通过自定义弹框视图来实现。
答疑: 1、弹框视图、蒙层视图、取消按钮、确定按钮,都是自己去定义。 2、不需要再重新设置frame(设置了也不会生效),滚轮选择器会自适应父视图大小(即会铺满你指定的容器视图)。
好的,谢谢大佬回复,刚才按你说的方法进行了开发,很棒。不过现在还有一个小问题就是怎么拿到默认选中的数据呢?
就是使用addPickerToView直接打开pickerView不进行任何操作,直接点击自定义的“确定”,怎么拿到这个时候默认选中的数据呢?
我的代码是这样的: BRAddressPickerView *addressPickerView = [[BRAddressPickerView alloc]init]; addressPickerView.pickerMode = BRAddressPickerModeArea; addressPickerView.title = @"请选择地区";
addressPickerView.dataSourceArr = AddressInModel.provincelist;
addressPickerView.isAutoSelect = YES;
addressPickerView.resultBlock = ^(BRProvinceModel * _Nullable province, BRCityModel * _Nullable city, BRAreaModel * _Nullable area) {
weakself.provinceModel = province;
weakself.cityModel = city;
weakself.areaModel = area;
};
[addressPickerView addPickerToView:self.pickerBgView];
resultBlock回调只有滚动滚轮时才会触发回调,可以使用下面这种方法,就是在你自定义的确定按钮点击事件方法里,执行一下doneBlock回调(会触发组件内部执行resultBlock回调)。
参考代码如下:
- (void)clickCustomDoneBtn {
if (self.addressPickerView.doneBlock) {
self.addressPickerView.doneBlock();
}
}
好的,谢谢大佬指点,棒棒哒,完美解决问题。
添加pikerView的代码:
BRAddressPickerView *addressPickerView = [[BRAddressPickerView alloc]init];
addressPickerView.pickerMode = BRAddressPickerModeArea;
addressPickerView.title = @"请选择地区";
addressPickerView.dataSourceArr = AddressInModel.provincelist;
addressPickerView.isAutoSelect = YES;
addressPickerView.resultBlock = ^(BRProvinceModel * _Nullable province, BRCityModel * _Nullable city, BRAreaModel * _Nullable area) {
weakself.provinceModel = province;
weakself.cityModel = city;
weakself.areaModel = area;
};
self.addressPickerView = addressPickerView;
[addressPickerView addPickerToView:self.pickerBgView];
自定义“确定”按钮代码: -(void)clickCustomDoneBtn{
//先执行doneBlock,然后里面会执行resultBlock
if (self.addressPickerView.doneBlock) {
self.addressPickerView.doneBlock();
}
if (_addressSelectBlock) {
_addressSelectBlock(self.provinceModel,self.cityModel,self.areaModel);
}
}