2012-01-15 2 views
0

Я воспитываю UIAlertView, который отлично работает в портретном макете, но когда в ландшафтном режиме - сообщение не появляется.UIAlertView, не отображающий текст сообщения

Это стандартный UIAlertView с тремя кнопками.

UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"one", @"two", nil]; 

Я попытался перемещением кнопки вниз (в зависимости от высоты этикетки сообщения) и изменения размеров предупреждения в соответствии с перемещенными кнопками, но сообщение все еще не появляется, несмотря на наличие достаточно мест для дисплей.
Установка фона UILabel в какой-то цвет для отладки показывает, что он просто не отображается ..

EDIT:

UILabel является там - это просто не отображается.
В методе willPresentAlertView я вижу UILabel в подзаголовках NSAlertView.

+0

UIAlertView! = NSAlert. Первый - iOS, позже - Mac OS X. – DarkDust

+0

@DarkDust: проскальзывание клавиатуры. Modified. Спасибо – DefenestrationDay

+0

Возможный дубликат [UIAlertView в ландшафтном режиме не отображает сообщение] (http://stackoverflow.com/questions/8059297/uialertview-in-landscape-mode-does-not-display-message) – DarkDust

ответ

1

Вероятно, вы пропустили:

[alert show]; 
+0

Afaik нет никакой разницы с ориентацией ... отлично подходит для меня в любой ориентации ... – DAS

+0

Появляется предупреждение, я могу отменить его с помощью кнопок и т. Д. - просто текст сообщения отсутствует. – DefenestrationDay

+0

Пожалуйста, попробуйте сами: с двумя кнопками, сообщение показывает только хорошо. С тремя кнопками сообщение действительно отсутствует в ландшафтном режиме, так как макет кнопки не оставляет достаточно места для сообщения. – DarkDust

-1

Вы можете непосредственно использовать uialertview и создать объект этого. Затем пропустите заголовок и сообщение и кнопку, а также другую кнопку ..... И нажмите кнопку кнопку кнопку метода.

// Пример

UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Title" message:@"The message." 
delegate:self cancelButtonTitle:@"button 1" otherButtonTitles:@"button", nil]; 
        [alert show]; 
        [alert relaese]; 


//Then use this method 

-(void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
// the user clicked one of the ok/cancel buttons 
    if(buttonIndex==0) 
    { 
     NSLog(@"Ok"); 
    } 
    else 
    { 
    NSLog(@"cancel"); 
    } 
} 
2

Это, кажется, ошибка с кодом макета для UIAlertView. После пустячный немного в отладчике мне удалось получить этот обходной путь:

UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"one", @"two", nil]; 

[alert show]; 

// for some reason we have alpha 0 for 3 or 4 buttons 
[[[alert subviews] objectAtIndex:2] setAlpha:1]; 
// also, for 3 buttons the height goes to 10 -> proof of concept 'fix' 
[[[alert subviews] objectAtIndex:2] setFrame:CGRectMake(12, 45, 260, 24)]; 

[alert release]; 

Это просто доказательство концепции. Настоящий workaroung должен выполнять итерацию в subviews и фиксировать только метки, которые имеют либо высоту, либо малую или альфа == 0

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