uialertview с добавленными кнопками для всплывающего окна рейтинга

Я хочу добавить всплывающее окно «Оценить это приложение» в свое приложение, и в настоящее время я собираюсь сделать это с помощью UIAlertView.

У меня предупреждение отображается нормально, с кнопками заголовка и отмены / завершения.

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Rate this App"
                                                message:@"My message" delegate:self
                                      cancelButtonTitle:@"Cancel"
                                      otherButtonTitles:@"OK", nil];
[alert show];

Что мне нужно сделать сейчас, так это заменить раздел «мое сообщение» 5 настраиваемыми кнопками (звездочками).

Как я могу добавить ряд настраиваемых кнопок в среднюю часть uialertview ?!


person R2D2    schedule 26.05.2013    source источник


Ответы (1)


У вас есть два варианта

  1. Используйте 1_

  2. Наследовать новое представление от UIAlertView и сделать это внутренне

Если он показан только в одном месте, 1 - быстрое и простое решение. Вы можете установить тег для каждой кнопки и добавить одно и то же событие нажатия

// Interface.h

NSArray *allButtons;

// Implementation.m

UIAlertView *alert = [[UIAlertView alloc] init:...];

UIButton *one = [UIButton buttonWithType:UIButtonTypeCustom];
UIButton *two = [UIButton buttonWithType:UIButtonTypeCustom];
...

// Load "empty star" and "filled star" images
UIImage *starUnselected = ...;
UIImage *starSelected = ...;

[one setImage:starUnselected forControlState:UIControlStateNormal];
[one setImage:starSelected forControlState:UIControlStateSelected];
// repeat for all buttons
...

[one setTag:1];
[two setTag:2];
...

[one addTarget:self action:@selector(buttonPressed:) 
     forControlEvents:UIControlEventTouchUpInside];

// repeat for all buttons

allButtons = [NSArray arrayWithObjects:one, two, three, four, five];

// all buttons should subscribe
- (void)buttonPressed:(UIButton)sender 
{
    int tag = [sender getTag]; // The rating value

    for (int i = 0; i < [allButtons length]; i++)
    {
        BOOL isSelected = i < tag;

        [(UIButton)[allButtons objectAtIndex:i] setSelected:isSelected];
    }

    // Set alertTag to store current set one
    // read [alert getTag] when OK button is pressed
    [alert setTag:tag];
}
person Tom Fobear    schedule 26.05.2013
comment
Он будет использоваться только в одном месте, и ваш вариант 1 звучит правильно! Можете ли вы расширить фрагмент кода в пункте ответа 1? Я попытался добавить кнопку в UIAlertView, но получил ошибки. - person R2D2; 27.05.2013
comment
Теперь у меня все это работает блестяще. Ваш пример и вклад очень помогли, и мы очень ценим их! Большое спасибо! - person R2D2; 27.05.2013