it-swarm.com.ru

UIAlertView addSubview в iOS7

Добавление некоторых элементов управления в UIAlertView устарело в iOS7 с использованием метода addSubview. Как я знаю Apple обещал добавить свойство contentView.

iOS 7 выпущена, и я вижу, что это свойство не добавлено. Вот почему я ищу какое-то нестандартное решение с возможностью добавления индикатора выполнения в этом alertView. Например, что-то похожее на TSAlertView , но более готовое для использования в iOS 7 .

67
B.S.

Вот проект на Github чтобы добавить любой UIView в диалог UIAlertView на iOS7.

(Скопировано из этот поток StackOverflow .)

Custom iOS7 AlertView dialog

55
Wimagguc

Мне потребовался всего 1 день, чтобы создать собственное представление предупреждений, которое выглядит точно так же, как у Apple

  1. Сделайте снимок экрана с предупреждением Apple для справки (размеры шрифта, расстояния, ширина)
  2. Создайте xib с заголовком, сообщением, пользовательским представлением и таблицами для кнопок (Apple теперь использует таблицы вместо UIButton, ячейка таблицы по умолчанию достаточно хороша). Обратите внимание, что вам нужно 3 таблицы кнопок: две для левой и правой кнопок (когда число кнопок равно 2), другая для остальных случаев (одна кнопка или более 2 кнопок).
  3. Реализуйте все методы из UIAlertView в своем настраиваемом предупреждении.

  4. Показать/Отклонить - вы можете создать специальное модальное окно для ваших предупреждений, но я просто разместил свои предупреждения поверх моего корневого контроллера представления. Зарегистрируйте ваши видимые оповещения в статическом массиве. При отображении первого предупреждения/отклонении последнего измените режим оттенка контроллера окна/представления на затемненный/автоматический и добавьте/удалите режим затемнения (черный с альфа = 0,2).

  5. Размытый фон - используйте образец кода Apple (я использовал непрозрачный белый)
  6. 3D динамические эффекты - используйте образец кода Apple (5 строк кода). Если вы хотите эффект Ниццы, сделайте снимок чуть большего размера на шаге 5 и добавьте обратные аниматоры для фона оповещения и переднего плана.

Правка:

Размытый фон и пример кода эффекта паралакса можно найти в примере кода "iOS_RunningWithASnap" WWDC 2013

Эффект паралакса:

UIInterpolatingMotionEffect* xAxis = [[[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x"
                                                                                     type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis] autorelease];
xAxis.minimumRelativeValue = [NSNumber numberWithFloat:-10.0];
xAxis.maximumRelativeValue = [NSNumber numberWithFloat:10.0];

UIInterpolatingMotionEffect* yAxis = [[[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y"
                                                                                     type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis] autorelease];
yAxis.minimumRelativeValue = [NSNumber numberWithFloat:-10.0];
yAxis.maximumRelativeValue = [NSNumber numberWithFloat:10.0];

UIMotionEffectGroup *group = [[[UIMotionEffectGroup alloc] init] autorelease];
group.motionEffects = @[xAxis, yAxis];
[self addMotionEffect:group];

Размытый фон - единственная сложная вещь. Если вместо этого вы можете использовать непрозрачный цвет, используйте его. В противном случае это много экспериментов. Также обратите внимание, что размытый фон не является хорошим решением, когда фон темный.

Для анимации show/dismiss я использую новый метод анимации весны:

void (^animations)() = ^{
    self.alpha = 1.0f;
    self.transform = CGAffineTransformIdentity;
};

self.alpha = 0.0f;
self.transform = CGAffineTransformMakeScale(0.5f, 0.5f);

[UIView animateWithDuration:0.3
                      delay:0.0
     usingSpringWithDamping:0.7f
      initialSpringVelocity:0.0f
                    options:UIViewAnimationOptionCurveLinear
                 animations:animations
                 completion:^(BOOL completed) {
                         //calling UIAlertViewDelegate method
                     }];
35
Sulthan

Я написал полную реализацию UIAlertView, которая имитирует полный API UIAlertView, но добавляет свойство contentView, которое мы все так долго хотели: SDCAlertView .

image

32
Scott Berrevoets

Для тех, кто любит простые и эффективные методы без необходимости писать строки кода. Вот отличное решение без использования каких-либо других закрытых кадров для добавления подпредставлений в представления предупреждений ios 7, т.е.

[alertView setValue: imageView forKey: @ "accessoryView"];

Пример кода для лучшего понимания,

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(180, 10, 85, 50)];
UIImage *wonImage = [UIImage imageNamed:@"image.png"];
[imageView setImage:wonImage];

//check if os version is 7 or above
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
      [alertView setValue:imageView forKey:@"accessoryView"];
}else{
      [alertView addSubview:imageView];
}

Надеюсь, это поможет кому-то, спасибо :)

27
Eshwar Chaitanya

Для IOS7

UIAlertView *alertView1 = [[UIAlertView alloc] initWithTitle:@"Enter Form Name" 
                                               message:@""
                                               delegate:self 
                                               cancelButtonTitle:@"Cancel"
                                               otherButtonTitles:@"Ok", nil];
alertView1.alertViewStyle = UIAlertViewStyleSecureTextInput;
UITextField *myTextField = [alertView1 textFieldAtIndex:0];
[alertView1 setTag:555];
myTextField.keyboardType=UIKeyboardTypeAlphabet;

[alertView1 show];
17
Ganesh manoj

Там не будет UIAlertView с пользовательскими представлениями в iOS7, ни contentView, о котором Apple передумал, так что addSubview теперь невозможно в UIAlertView.

Хорошая альтернатива будет SVProgressHUD , согласно многим темам на форуме Apple.

Редактировать :

Официально нет addSubview и подклассов для UIAlertView в iOS7 .

Класс UIAlertView предназначен для использования как есть и не поддерживает создание подклассов. Иерархия представления для этого класса является частной и не должна изменяться.

Другие хорошие альтернативы:

ios-custom-alertview от wimagguc

MZFormSheetController .

10
null

Вы можете найти простое решение без лишних классов здесь

Он основан на настройке accessoryView для обычного UIAlertView .

1
malex

PKAlertController ( https://github.com/goodpatch/PKAlertController ) отличная библиотека. Я протестировал много похожих библиотек, и это удовлетворило все мои требования.

Почему это круто

  • Поддерживает пользовательский вид
  • Поддерживает iOS7
  • Это контроллер просмотра
  • Он ведет себя и выглядит как родной вид оповещения, включая эффекты движения
  • Настраиваемый
  • Подобный интерфейс, как в UIAlertController
1
Igor Palaguta