Пользовательский UIAlertView iphone - PullRequest
0 голосов
/ 07 сентября 2011

У меня проблема .. Я использовал это http://kwigbo.com/post/318396305/iphone-sdk-custom-uialertview-background-color, чтобы создать свой собственный UIAlertView. Я не знаю почему, но это не сработает:

UILabel *theTitle = [theAlert valueForKey:@"_titleLabel"];

[theTitle setTextColor:[UIColor redColor]];

UILabel *theBody = [theAlert valueForKey:@"_bodyTextLabel"];

[theBody setTextColor:[UIColor blueColor]];

цвет заголовка не меняется .. цвет текста все в порядке.

  1. Как мне настроить кнопки?

Ответы [ 4 ]

2 голосов
/ 07 сентября 2011

Привет Достигнуто то же самое с помощью пользовательского UIAleartView.

  1. Создайте пользовательский вид следующим образом.

    UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 5.0f, 262.0, 49)]; 
    tempView.backgroundColor = [UIColor clearColor];
    
    UILabel *lblTitle = [[UILabel alloc] initWithFrame:CGRectMake(12, 0, 262.0, 49)];
    lblTitle.font = [UIFont fontWithName:@"Arial" size:22.0f];
    lblTitle.textColor = [UIColor whiteColor];
    lblTitle.textAlignment = UITextAlignmentCenter;
    lblTitle.text = @"Subscribe";
     lblTitle.backgroundColor = [UIColor clearColor];
     [tempView addSubview:lblTitle];
    
    alreadySubscriber = [[UIButton alloc] initWithFrame:CGRectMake(12, 260, 262.0, 50)];
    alreadySubscriber.layer.cornerRadius = 25.0f;
    [alreadySubscriber setTitle:@"Already a subscriber" forState:UIControlStateNormal];
    [alreadySubscriber setBackgroundImage:[UIImage imageNamed:@"BTN0.png"] forState:UIControlStateNormal];
    [alreadySubscriber setBackgroundImage:[UIImage imageNamed:@"BTN1.png"] forState:UIControlStateSelected];
    [tempView addSubview:alreadySubscriber];
    
  2. Вставьте это в UIAleartView

    [self insertSubview:tempView atIndex:0];
    [self setNeedsLayout];
    
  3. Переопределить layoutsubview, поскольку вы уже сделали, сдвиньте все остальные элементы управления вниз, равные высоте представления.

-> в основном важно скрыть заголовок UIAleartView за меткой.

2 голосов
/ 07 сентября 2011

Не знаю точно, в чем может быть ваша проблема, но мы столкнулись с аналогичной ситуацией при попытке настроить пользовательский UIAlertView, поэтому она может быть похожей.

Похоже, что пользовательское решение в указанной вами ссылке управляет оповещенияминазвание и фон путем доступа к иерархии подпредставлений и «угадывания», какое подпредставление может быть каким.(Я могу ошибаться, не рассматривал его подробно). Проблема с этим подходом в том, что он будет работать нормально для одной версии ОС, но в последующих версиях ОС Apple может каким-то образом реструктурировать эту иерархию подпредставления, и это«догадки» больше не точны.(т. е. подпредставление, которое предполагается фоновым изображением, может и не быть).

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

0 голосов
/ 07 сентября 2011

Если @"_titleLabel" является частью иерархии UIAlertView (что, вероятно, с учетом префикса _), я не могу рекомендовать ваш подход.

Apple может когда-нибудь изменить ключевые строки: если @"_titleLabel" когда-либо изменится, скажем, @"_titleLabelView", вы утонули и, возможно, никогда не узнаете, что затонули Это даже может быть основанием для отказа, я бы не знал.

Лучше начать с нуля с помощью собственного пользовательского представления с подклассами UIView. Только тогда вы можете гарантировать, что это будет стабильно от ОС к ОС. Кроме того, время, которое вы теряете, пытаясь найти ярлык, будет потрачено положительно на создание чего-то долговечного.

0 голосов
/ 07 сентября 2011

Я считаю, что вы можете найти правильное решение, не используя стандартные инструменты, которые присутствуют в UIAlertView. Но в этом случае ваше приложение не будет одобрено для AppStore. Таким образом, я настоятельно рекомендую вам избегать использования пользовательских кнопок в AlertView. Возможно, вы найдете решение, использующее UIActionSheet вместо UIAlertView. Это больше настройки.

...