Пользовательский вид, который выглядит как 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, будут выглядеть по-разному в зависимости от версии, так что это будет хорошо, проблема, которую я вижу, будет в представлении, которое содержит тогда.
Мое предложение состоит в том, чтобы определить версию, в которой запущено приложение, а затем нарисовать представление предупреждений на основе этого или создать собственный дизайн, который будет соответствовать обоим.