【问题标题】:Why UIBarButtonItem not getting clicks in UIToolbar set as inputAccessoryView of UITextField?为什么 UIBarButtonItem 在 UIToolbar 中没有获得点击设置为 UITextField 的 inputAccessoryView?
【发布时间】:2013-12-01 12:34:27
【问题描述】:

UIBarItem 不响应在 UITextField 上设置为 inputAccessoryView 的 UIToolbar 内的点击。

当我尝试单击按钮时,该按钮不显示单击动画,回调不会被调用。 我的设置如下:

@interface MyViewController()
@property (weak, nonatomic) IBOutlet UITextField *closeDateTextField;
@property (strong, nonatomic) UIToolbar * datePickerToolbar;
@end

我用按钮设置工具栏:

- (void)viewDidLoad {

    self.datePickerToolbar = [[UIToolbar alloc] init];
    UIBarButtonItem * doneBtn =
        [[UIBarButtonItem alloc]
                initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                target:self
                action:@selector(hidePicker:)];

向工具栏添加按钮并将工具栏设置为inputAccessoryView of UITextField

    [self.datePickerToolbar setItems:@[doneBtn] animated:NO];
    self.closeDateTextField.inputAccessoryView = self.datePickerToolbar;
}

当我点击closeDateTextField 时,键盘会在工具栏中出现Done 按钮,但该按钮不响应点击,hidePicker: 不会被调用。

- (void)hidePicker:(id)sender {
    [self.closeDateTextField resignFirstResponder];
}

知道我做错了什么吗?

【问题讨论】:

    标签: objective-c cocoa-touch uitoolbar uibaritem inputaccessoryview


    【解决方案1】:

    我刚刚尝试了以下代码,它工作得很好。在 iOS 6 和 7 模拟器上测试。

    @interface HSViewController
    
    @property (weak, nonatomic) IBOutlet UITextField *closeDateTextField;
    @property (strong, nonatomic) UIToolbar * datePickerToolbar;
    
    @end
    
    @implementation HSViewController
    
    - (void)viewDidLoad
    {
        NSLog(@"%s", __PRETTY_FUNCTION__);
        [super viewDidLoad];
    
        self.datePickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        UIBarButtonItem * doneBtn =
        [[UIBarButtonItem alloc]
         initWithBarButtonSystemItem:UIBarButtonSystemItemDone
         target:self
         action:@selector(hidePicker:)];
        [self.datePickerToolbar setItems:@[doneBtn] animated:NO];
    
        UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 320, 120)];
        textField.backgroundColor = [UIColor greenColor];
        [self.view addSubview:textField];
        self.closeDateTextField = textField;
        self.closeDateTextField.inputAccessoryView = self.datePickerToolbar;
    }
    
    - (void)hidePicker:(id)sender {
        NSLog(@"%s", __PRETTY_FUNCTION__);
        [self.closeDateTextField resignFirstResponder];
    }
    
    @end
    

    【讨论】:

    • 它之所以有效,是因为您设置了帧大小,我正在尝试使用自动布局,但无法通过自动布局确定 inputAccessoryView 的大小...如果我设置显式大小,那么它可以像您的示例一样正常工作
    【解决方案2】:

    self.datePickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 43)];

    当我将工具栏高度设置为小于 44. 43 时,它对我有用

    当它是 44 时它崩溃了

    【讨论】:

      【解决方案3】:

      您应该只设置它的autoresizingMask,而不是设置UIToolbar

      self.datePickerToolbar.autoresizingMask = 
          UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
      

      这样,您将获得预期的行为,同时独立于设备/方向。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多