添加选择器视图时,ToolBar按钮不起作用,如accessoryView

时间:2014-02-18 10:32:57

标签: ios iphone uibutton uipickerview toolbar

当我在选择器视图上添加工具栏时,工具栏按钮不起作用。它适用于iOS 6,但不适用于iOS 7。

 UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0 ,0, 320, 44)];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(handleDone)];

UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel"
                                                                 style:UIBarButtonItemStyleBordered
                                                                target:self
                                                                action:@selector(handleCancel)];

UIBarButtonItem *flexible = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                                          target:self
                                                                          action:nil];

[toolBar setItems:[NSArray arrayWithObjects:cancelButton, flexible, doneButton, nil] animated:YES];

[pikerView addSubview:toolBar];

1 个答案:

答案 0 :(得分:3)

UIToolbar使用'完成'按钮应添加到成为第一响应者的视图的inputAccessoryView。由于UIView类继承自UIResponder,因此任何视图都可能包含inputViewinputAccessoryView。因此,您可以使用UIResponder的键盘显示/隐藏动画附带的默认动画行为,而不是以编程方式手动执行动画。

  1. UIView进行子类化并覆盖inputViewinputAccessoryView属性并将其设为readwrite。在这个例子中,我将子类化UITableViewCell

    // FirstResponderTableViewCell.h
    @interface FirstResponderTableViewCell : UITableViewCell
    @property (readwrite, strong, nonatomic) UIView *inputView;
    @property (readwrite, strong, nonatomic) UIView *inputAccessoryView;
    @end
    
  2. 覆盖子类中的canBecomeFirstResponder'实施

    // FirstResponderTableViewCell.m
    - (BOOL)canBecomeFirstResponder {
        return YES;
    }
    
  3. 在视图控制器中,创建并指定选择器视图和输入附件工具栏

    // MyViewController.m
    - (void)viewDidLoad {
        [super viewDidLoad];
        UIPickerView *pickerView = [[UIPickerView alloc] init];
        UIToolbar *accessoryToolbar = [UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
        // Configure toolbar .....
    
        // note: myFirstResponderTableViewCell is an IBOutlet to a static cell in storyboard of type FirstResponderTableViewCell
        self.myFirstResponderTableViewCell.inputView = pickerView;
        self.myFirstResponderTableViewCell.inputAccessoryView = accessoryToolbar;
    }
    
  4. 请勿忘记在需要时将第一响应者分配给视图(例如内部 - tableView:didSelectRowAtIndexPath:

    [self.myFirstResponderTableViewCell becomeFirstResponder];
    
  5. 希望这有帮助。

    参考:http://blog.swierczynski.net/2010/12/how-to-create-uipickerview-with-toolbar-above-it-in-ios/