0

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

1 回答 1

0

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

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

于 2013-08-16T01:16:15.850 回答