Пользовательский вид, который выглядит как UIAlertView

Мне нужно что-то, что выглядит UIAlertView (тот же фон прозрачный и не полный экран), блокирует другие части пользовательского интерфейса и имеет некоторый пользовательский контент. Это пользовательский контент: два флажка с метками и две кнопки YES/NO внизу.

Подклассификация или настройка UIAlertView не выглядит полезным (см. этот ответ) и опасно (код может быть отклонен Apple). Я думал создать свой заказ UIView (возможно с UIViewController), но я понятия не имею, как сделать так, чтобы он выглядел и чувствовал себя как UIAlertView. Я имею в виду, что хотел бы сделать так, чтобы он менял свой внешний вид в зависимости от версии iOS (iOS7).

Обновление: я могу отказаться от зависимости от версии ОС, было бы неплохо, но это дополнительная функция.
Главный вопрос: есть ли хороший способ создать такое представление, которое будет выглядеть и ощущаться как UIAlertView без большого объема работы? Пользовательская настройка UIAlertView выглядит прямо сложным и опасным.

4 ответа

Решение

Я создал свой собственный пользовательский вид, похожий на iOS UIAlertView 7. С помощью этой техники вы можете создать пользовательское оповещение как для iOS 6, так и для iOS 7. Для этого я создал UIView в моем файле xib моего UIViewController:

Я добавил @property для этого представления:

// Custom iOS 7 Alert View
@property (nonatomic, weak) IBOutlet UIView *supportViewPopup; // My UIView
@property (nonatomic, weak) IBOutlet UIView *supportViewPopupBackground; // The grey view
@property (nonatomic, weak) IBOutlet UIView *supportViewPopupAction; // The white view with outlets
// Property for customize the UI of this alert (you can add other labels, buttons, tableview, etc.
@property (nonatomic, weak) IBOutlet UIButton *buttonOK;
@property (nonatomic, weak) IBOutlet UIButton *buttonCancel;
@property (nonatomic, weak) IBOutlet UILabel *labelDescription;

На мой взгляд DidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];

       // Support View
    self.supportViewPopupAction.layer.cornerRadius = 5.0f;
    self.supportViewPopupAction.layer.masksToBounds = YES;

    // Add Support View
    [self.view addSubview:self.supportViewPopup];

    // Center Support view
    self.supportViewPopup.center = self.view.center;

    // Alpha
    self.supportViewPopup.alpha = 0.0f;
    self.supportViewPopupBackground.alpha = 0.0f;
    self.supportViewPopupAction.alpha = 0.0f;
}

Действие для отображения всплывающего окна:

- (IBAction)displayPopup
{
    // Support View
    self.supportViewPopup.alpha = 1.0f;
    self.supportViewPopupBackground.alpha = 0.5f;

    // Animation
    [UIView animateWithDuration:0.5f
                     animations:^{
                         self.supportViewPopupAction.alpha = 1.0f;
                     }];
}

Действие, чтобы уволить Popup:

- (IBAction)dismissModal
{
    // Animation
    [UIView animateWithDuration:0.5f
                     animations:^{
                         self.supportViewPopup.alpha = 0.0f;
                         self.supportViewPopupBackground.alpha = 0.0f;
                         self.supportViewPopupAction.alpha = 0.0f;
                     }];
}

Итак, с этим вы можете настроить supportViewPopupAction как вы хотите с кнопками, видом таблицы, метками, видом коллекции и т. д.

Я потратил время, чтобы написать этот пример просмотра предупреждений. Я надеюсь, что это поможет вам!

Пользовательские представления могут быть переданы в PXAlertView: https://github.com/alexanderjarvis/PXAlertView

Создавайте вид в зависимости от версии iOS!

NSString *version = [[UIDevice currentDevice] systemVersion];
        int major = [version intValue];
        if (major < 7)
            //alert for the iOS 6
    else
    //alert for the iOS 7

Некоторые компоненты, такие как UIButtons и UITextFields, будут выглядеть по-разному в зависимости от версии, так что это будет хорошо, проблема, которую я вижу, будет в представлении, которое содержит тогда.

Мое предложение состоит в том, чтобы определить версию, в которой запущено приложение, а затем нарисовать представление предупреждений на основе этого или создать собственный дизайн, который будет соответствовать обоим.

Другие вопросы по тегам