我正在尝试创建 UIPickerView 的子类并在选择器上方添加 UIToolbar 。我在这里和那里阅读了几篇帖子,但我发现大多数人建议创建一个视图并在其上添加选择器和工具栏。(或使用 UIActionSheet)
这是我到目前为止所尝试的。
CU_PICKERView 是 UIPickerView 的子类 我尝试使用 inputView 和 inputAccessoryView 这已经是 pickerview 的属性
@interface CU_PICKERView : UIPickerView
@property (strong, readwrite) UIView * inputView;
@property (strong, readwrite) UIView * inputAccessoryView;
-(void)showWithAnimation:(BOOL)flag;
-(void)hideWithAnimation:(BOOL)flag;
@end
下面是 CU_PICKERView.m
- (id)init
{
self = [super init];
if (self)
{
[self setToolbar];
[self becomeFirstResponder];
}
return self;
}
-(void)setToolbar
{
_toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[_toolbar setBarStyle:UIBarStyleDefault];
UIBarButtonItem * btnCancel = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(barbtnPressed:)];
[btnCancel setTag:TOOLBAR_BTN_CANCEL];
[btnCancel setStyle:UIBarButtonItemStyleBordered];
NSArray * btnArray = [[NSArray alloc] initWithObjects:btnCancel, nil];
[_toolbar setItems:btnArray];
self.inputAccessoryView = _toolbar;
self.inputView = self;
}
-(BOOL)canBecomeFirstResponder
{
return true;
}
-(void)barbtnPressed:(id)sender
{
TOOLBAR_TAG tag = [sender tag];
switch (tag) {
case TOOLBAR_BTN_CANCEL:
{
[self hideWithAnimation:YES];
break;
}
default:
break;
}
}
从这里是奇怪的点。我像往常一样创建了一个 CU_PickerView 的实例。
其他视图控制器.m
- (void)viewDidLoad
{
[super viewDidLoad];
[self setPicker];
}
-(void)setPicker
{
_picker = [[CU_PICKERView alloc] init];
[_picker setShowsSelectionIndicator:YES];
[self.view addSubview:_picker];
}
似乎它工作得很好。showWithAnimation 和 hideWithAnimation 运行良好。
我在 OtherViewController 上创建了一个按钮,并尝试使用该按钮来创建和显示 CUPICKERView。我只是将 setPicker 方法移动到按钮事件处理程序,但它不起作用。我不能让 inputAccessoryView 显示出来。
我试图调用 [_picker becomeFirstResponder] 但它不起作用。
关于inputAccessoryView,我有什么遗漏吗?
- 我解决了它。在 viewDidLoad 中调用 setPicker 并将其隐藏在 viewDidAppear 中。