Переместите кнопки вниз в UIAlertView - PullRequest
1 голос
/ 08 января 2012

У меня есть приложение, которое отображается в ландшафтном режиме, и я переписал высоту UIAlertView следующим кодом:

- (void) willPresentAlertView:(UIAlertView *)alertView
{
    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    CGRect frame = [alertView frame];
    alertView.frame = CGRectMake(frame.origin.x, 0, frame.size.width, screenBounds.size.width);
}

Это почти работает. UIAlertView выше, однако кнопки в окне предупреждений не нажимаются.

Кто-нибудь знает, как я могу нажимать кнопки внизу UIAlertView, когда я изменяю высоту просмотра предупреждений?

Ответы [ 4 ]

1 голос
/ 08 января 2012

Я думаю, что более элегантно и менее рискованно заменять UIAlertView каким-либо независимым AlertView, а не возиться с ним. С независимым я имею в виду не наследовать форму UIAlertView.
TSAlertView является такой заменой.

http://dl.dropbox.com/u/47535/TSAlertView/1-thumb.png http://dl.dropbox.com/u/47535/TSAlertView/3-thumb.png http://dl.dropbox.com/u/47535/TSAlertView/2-thumb.png

0 голосов
/ 23 мая 2014

NSArray * subViewArray = [подпредставления alertView];

for (NSUInteger ind=0 ; ind < [subViewArray count]; ind++) {

    if ([[alertView.subviews objectAtIndex:ind] isKindOfClass:[UIButton class]]) {
        UIButton* button1 = (UIButton*)[alertView.subviews objectAtIndex:ind];
        [button1 setFrame:CGRectMake(button1.frame.origin.x, button1.frame.origin.y+100, button1.frame.size.width, button1.frame.size.height)];
        NSLog(@"button1.frame.origin.y=[%1.0f]",button1.frame.origin.y);

    }
}
0 голосов
/ 08 января 2012

Эта ссылка должна помочь.На мой взгляд, я бы не стал возиться с иерархией представлений.Это может привести к отказу от App Store.Либо создайте новый AlertView с нуля, либо оставьте его как есть.

0 голосов
/ 08 января 2012

Я предполагаю, что вам, вероятно, придется создать подкласс / манипулировать классом UIAlertView, чтобы достичь этого, что может быть рискованно, поскольку Apple может изменить свои реализации, поэтому сверните ваш код в соответствующие проверки.

Началобыло бы сделать:

NSLog(@"UIAlertView subviews: %@",alertView.subviews);

Это выведет некоторый вывод для различных элементов, составляющих UIAlertView, вы, вероятно, увидите там несколько UIB-кнопок, которыми вы можете затем манипулировать, используя что-то вроде:

UIButton* button1 = (UIButton*)[alertView.subviews objectAtIndex:N];
[button1 setFrame:CGRect(button1.frame.origin.x, button1.frame.origin.y+10, button1.frame.size.width, button1.frame.size.height)]

Разумной проверкой было бы подтверждение того, что objectAtIndex является правильным типом элемента перед выполнением операций над ним, однако это не является надежным, поскольку Apple может добавить больше UIButton или что-то в этом роде.

if ([[alertView.subviews objectAtIndex:N] isKindOfClass:[UIButton class]]) {
  ...
}

В зависимости от вашей ситуации вы также можете перебирать массив подпредставлений и перемещать все кнопки UIB вниз, а не просто кодировать в некоторых конкретных объектах AtIndex, но это совсем другой ответ.: -)

...