繁体   English   中英

将UIBarButtonItem添加到UIActionSheet导航栏(UIDatePicker)

[英]Adding UIBarButtonItem to UIActionSheet navigation bar (UIDatePicker)

我创建了UIActionSheet并在其之上添加了一个UIPickerView。 现在,我想在UIActionSheet导航栏标题的右侧和左侧添加两个按钮。 我怎样才能做到这一点?

这是我到目前为止所做的:

- (IBAction)userDidClickedOnSelectDate:(id)sender
{
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Select your birthday date:" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Select", nil];
    [actionSheet showInView:self.view];
    [actionSheet setFrame:CGRectMake(0, 100, 570, 383)];
}

我正在尝试以这种方式添加UIButton,但是我不知道为什么我无法在视图中看到它。 当我检查UIActionSheet子视图时,他在那里(也许在下面)。

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
    UIDatePicker *pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(10, 50, 50, 216)];

    //  Configure picker...
    [pickerView setDatePickerMode:UIDatePickerModeDate];
    [pickerView setTag:ACTION_SHEET_PICKER_TAG];

    //  Add picker to action sheet
    [actionSheet addSubview:pickerView];

    //  Add button to the action sheet
    UIButton *buttonCancel = [UIButton buttonWithType:UIButtonTypeSystem];
    [buttonCancel setFrame:CGRectMake(5, 100, 200, 200)];
    [buttonCancel setTitle:@"close" forState:UIControlStateNormal];
    [buttonCancel setBackgroundColor:[UIColor redColor]];
    [actionSheet addSubview:buttonCancel];

    //  Gets an array af all of the subviews of our actionSheet
    NSArray *subviews = [actionSheet subviews];
    for (id button in subviews) {
        if ([button isKindOfClass:[UIButton class]]) {
            [button setUserInteractionEnabled:NO];
            [button setHidden:YES];
        }
    }
}

它是这样的:

在此处输入图片说明

我想出了一种方法来访问UIActionSheet导航栏或工具栏(标题位于此处)并在顶部添加按钮。

提前致谢。


根据人们的回答,我设法创建了一个更好的选择器视图,该视图具有相同的外观,但是处理和构建方式要好得多。 我创建了一个UIViewController,并添加了一个UIDatePicker和一个UIToolBar(顶部带有按钮)。 比这样称呼它:

- (IBAction)userDidClickedOnSelectDate:(id)sender
{
    CustomDatePicker *customPicker = [[CustomDatePicker alloc] initWithNibName:@"CustomDatePicker" bundle:nil];
    customPicker.delegate = self;
    customPicker.view.backgroundColor = [UIColor clearColor];
    self.modalPresentationStyle = UIModalPresentationCustom;
    [self presentViewController:customPicker animated:YES completion:nil];
}

我阿尔沃创建了一个代表,它告诉我何时单击取消和完成按钮:

- (void)datePickerDidCancelled:(CustomDatePicker *)picker
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

- (void)datePicker:(CustomDatePicker *)picker dateDidSelected:(NSDate *)date
{
    NSLog(@"selectedDate: %@", date);
    [self dismissViewControllerAnimated:YES completion:nil];
}

根据文档 ,不应将子视图添加到UIActionSheets。

UIActionSheet并非旨在被子类化,也不应将视图添加到其层次结构中。 如果您需要提供一个比UIActionSheet API提供的自定义表更多的工作表,则可以创建自己的工作表并使用presentViewController:animated:completion:进行模态显示。

我通常处理日期输入的方式是为控件(例如UILabelUITextField )创建自定义输入视图。 我创建了自己的子类来处理此问题,但是您可以在任何地方非常简单地临时进行处理。

  1. 将控件的InputView属性设置为pickerView
  2. 将控件的InputAccessoryView属性设置为您创建的UIToolbarUINavigationBar
  3. 将自定义按钮添加到工具栏/导航栏

如果要将其添加到UILabel ,请确保它可以成为“第一响应者”(有关说明,请参见此链接 )。

如果您想花哨的话,也可以将pickerview嵌入到UIInputView ,这将为您提供iOS中每个键盘输入所具有的相同模糊效果。 这部分可能需要进行一些调整,但最终效果却很简洁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM