对UIPickerView进行子类化并添加UIToolbar

时间:2013-08-14 13:55:40

标签: objective-c uipickerview

我正在尝试创建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实例。

OtherViewController.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中隐藏它。

1 个答案:

答案 0 :(得分:0)

好的,现在我弄清楚为什么很多人建议创建一个视图并在其上添加选择器和工具栏。

经过多次测试,使用USPeripheralHostView比使用视图(选择器+工具栏)更复杂。而且我不确定Apple是否允许这样做。