[英]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:进行模态显示。
我通常处理日期输入的方式是为控件(例如UILabel
或UITextField
)创建自定义输入视图。 我创建了自己的子类来处理此问题,但是您可以在任何地方非常简单地临时进行处理。
InputView
属性设置为pickerView InputAccessoryView
属性设置为您创建的UIToolbar
或UINavigationBar
如果要将其添加到UILabel
,请确保它可以成为“第一响应者”(有关说明,请参见此链接 )。
如果您想花哨的话,也可以将pickerview嵌入到UIInputView
,这将为您提供iOS中每个键盘输入所具有的相同模糊效果。 这部分可能需要进行一些调整,但最终效果却很简洁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.