2014-11-05 3 views
2

У меня есть приложение, в котором мне нужно отобразить всплывающее окно, чтобы выбрать дату и записать эту дату обратно в контроллер вида.Как добавить выбор даты в UIAlertController (UIAlertView) в Swift?

Я много искал в Интернете, но не смог найти подходящее решение.

Любая помощь очень ценится.

+0

'UIAlertView' устарел в SDK iOS 8. Вы имеете в виду 'UIAlertController'? Если это так, этот вопрос может помочь: http://stackoverflow.com/questions/25545982/is-there-any-way-to-add-uipickerview-into-uialertcontroller-alert-or-actionshee – JAL

+0

@JAL Да, я имел в виду UIAlertController , Ссылка, которую вы указали, не о Swift (я имею в виду ответы пользователей, заданные для вопроса). Я не знаю Objective-C, я начал с Swift, поэтому мне сложно преобразовать этот код в Swift. –

ответ

12

Не используйте какой-либо UIAlertView или UIAlertController. Сделайте свой собственный вид и вытащите его (используя, возможно, представленный контроллер представления). Представление может быть небольшим, как сборщик дат, и вы можете поместить за ним теневое представление, как это делает предупреждение.

+0

В этом примере вы начнете: https://github.com/mattneub/custom-alert-view-iOS7. Он не включает в себя сборщик дат, но показывает, как превратить _any_ view в то, что выглядит и действует как оповещения. – matt

0

Это мой код:

- (id)initWithDatePicker:(NSString*)title parentView:(UIView*)parentView { 
self = [super init]; 

if (self) { 
    datePickerView = [[UIDatePicker alloc] init]; 
    datePickerView.datePickerMode = UIDatePickerModeDateAndTime; 
    if (IS_IOS8_AND_UP) { 
     alertViewController = [UIAlertController 
           alertControllerWithTitle:EMPTY_STRING 
           message:title 
           preferredStyle:UIAlertControllerStyleActionSheet]; 
     UIView* aboveBlurLayer = alertViewController.view.subviews[0]; 
     [aboveBlurLayer addSubview:datePickerView]; 
     [aboveBlurLayer setWidth:SCREEN_WIDTH - 16]; 
     [datePickerView setWidth:SCREEN_WIDTH - 16]; 
     [alertViewController.view setWidth:SCREEN_WIDTH - 16]; 
     [alertViewController.view setBackgroundColor:[UIColor whiteColor]]; 

     UIAlertAction* alertAction = 
     [UIAlertAction actionWithTitle:EMPTY_STRING 
            style:UIAlertActionStyleDefault 
           handler:nil]; 
     [alertViewController addAction:alertAction]; 
     [alertViewController addAction:alertAction]; 
     [alertViewController addAction:alertAction]; 
     [alertViewController addAction:alertAction]; 

     [datePickerView setBackgroundColor:[UIColor whiteColor]]; 
     [aboveBlurLayer addSubview:datePickerView]; 
    } else { 
     actionSheet = [[UIActionSheet alloc] initWithTitle:title 
                delegate:self 
              cancelButtonTitle:nil 
            destructiveButtonTitle:nil 
              otherButtonTitles:nil]; 

     [actionSheet addSubview:datePickerView]; 
    } 

    [self addToolBar]; 
    isDatePicker = YES; 
    parent = parentView; 
} 
    return self; 
} 

На панели инструментов У меня есть две кнопки Готово и Отмена На Готово я отправить обратно вызов через делегата с выбранной датой и отменить я увольте. Этот код предназначен как для iOS 7, так и для iOS 8

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