2014-01-31 4 views
0

Я создал UIActionSheet и добавил поверх него UIPickerView. Теперь я хочу добавить две кнопки справа и слева от заголовка панели навигации UIActionSheet. Как я могу это сделать?Добавление UIBarButtonItem в панель навигации UIActionSheet (UIDatePicker)

Это то, что я сделал до сих пор:

- (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 таким образом, но я не могу понять, почему я не могу видеть его в поле зрения. Когда я проверяю subviews 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]; 
     } 
    } 
} 

Вот как это выглядит:

enter image description here

выясню там способ достичь 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]; 
} 

Я alsvo создал делегат, который говорит мне, когда отменяют и Молодцы кнопки были нажаты:

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

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

Вы уверены, что хотите использовать для этого лист действий? Звучит скорее как модальный вид лучше ... – Wain

+1

это похоже на очень грязную технику вроде того, как делать 'addSubview' на объекте' UIAlertView'. Я сомневаюсь, что Apple будет в порядке. – staticVoidMan

ответ

2

Пер с documentation, вы не должны добавить подвидов в UIActionSheets.

UIActionSheet не предназначен для подкласса, и вы не должны добавлять к его иерархии. Если вам нужно представить листок с более подробной информацией о настройках, чем предоставленный API UIActionSheet, вы можете создать свой собственный и представить его по тексту с presentViewController: анимированный: завершение :.

1

Как я обычно обрабатывают входные сигналы даты, чтобы сделать вид пользовательского ввода для элемента управления (например, UILabel или UITextField). Я сделал свой собственный подкласс, чтобы справиться с этим, но вы можете сделать это ad-hoc в любом месте достаточно просто.

  1. Установите InputView свойство элемента управления вашей pickerView
  2. Установите InputAccessoryView свойство элемента управления к UIToolbar или UINavigationBar вы создали
  3. Добавить пользовательские кнопки панели инструментов/навигационной панели

Если вы добавляете это в UILabel, убедитесь, что он может стать Первым Ответчиком (см. this link для получения инструкций).

Если вы хотите получить фантазию, вы можете также вставить свой pickerview в UIInputView, который даст вам тот же размытый эффект, который вводит каждый клавиатура в iOS. Эта часть может потребовать некоторых настроек, но окончательный эффект довольно аккуратный.

Смежные вопросы