Всплывающее оповещение исчезает навсегда после нажатия кнопки - PullRequest
1 голос
/ 11 июля 2011

Я немного новичок в программировании UIAlertView.Я хотел создать всплывающее окно, которое показывает при запуске приложения еще две кнопки, кроме кнопки отклонения по умолчанию.Одной из кнопок будет ссылка на магазин приложений, а другой - навсегда закрыть это всплывающее окно.Я уже сделал все, кроме последней кнопки.Любая помощь?

Спасибо!

- (void)viewDidLoad {

alert = [[UIAlertView alloc] initWithTitle:@"Rate!" message:@"Your rate is much apreciated" delegate:self cancelButtonTitle:@"Not Now" otherButtonTitles:@"Okay!   ", @"No, Thanks!", nil ];
[alert show];
[alert release];
 }



-(void)alertView:(UIAlertView *) alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

if (buttonIndex == 0) {

}

if (buttonIndex == 1) {

     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunes.apple.com/pt/app/designertools/id444778173?mt=8#" ]];

}


}

Ответы [ 4 ]

3 голосов
/ 12 июля 2011

Вы, похоже, делаете предупреждение, чтобы оценить свое приложение в магазине приложений, вместо того, чтобы отвечать на ваш прямой (технический) вопрос, я постараюсь решить более крупную проблему. Вы должны рассмотреть существующее решение с открытым исходным кодом для обработки запросов пользователей на отзывы, вы можете контролировать функции, такие как, сколько запусков / дней спустя, чтобы запросить их.

Я могу порекомендовать Appirater от Arash Pyan . То, что он делает, это обрабатывает часть рейтинга приложения автоматически. Он перенаправляет пользователей прямо на страницу обзора вашего приложения, и его можно легко настроить. Лучшее решение для нового разработчика! Это доступно на GitHub.

iRate от demosthenese - аналогичное решение, но более чистое и поддерживает быстрое переключение приложений.

Используйте эти "готовые" решения вместо этого! Это должно сработать лучше, чем справиться с этим самостоятельно! Они включают документацию и примеры того, как настроить функции.

Кроме того, я думаю, что Apple не рекомендует использовать AlertViews для того, чтобы пользователи оценивали приложения. Используйте инструменты, упомянутые ответственно. Не просите пользователей слишком быстро, и убедитесь, что вы включаете кнопку «навсегда»!

Если вы находитесь здесь для технического решения проблемы (т. Е. При запросе на запуск с кнопкой «навсегда»), вот обзор того, что вы должны сделать:

-(void)viewdidload{

//Access NSUSerDefaults and check a variable called launch
// launch's default value is 0
if (launch == 0) {

    alert = [[UIAlertView alloc] initWithTitle:@"Rate!" message:@"You'll see this everytime you launch until you click Dismiss Forever" delegate:self cancelButtonTitle:@"Not Now" otherButtonTitles:@"Okay!   ", @"Dismiss Alert and Don't Show it to me", nil ];
[alert show];
[alert release];
 }

} 
else
{
//nothing
}
//continue customizing
}

-(void)alertView:(UIAlertView *) alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

if (buttonIndex == 0) 
//Assume this is the Okay Button
 {

//Now use NSUserDefaults and set a variable called launch to 1 
// the default value for launch should be 0
// now that its set to 1
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"ILoveAlertViews.com" ]];


}

if (buttonIndex == 1) {
//assume this is the dismiss button
//Now use NSUserDefaults and set a variable called launch to 2
//2 means that they never want to see it. The AlertView should not be called on the next launch 


}


}
3 голосов
/ 12 июля 2011

Вы можете использовать эту функцию

-(void)dismiss{
     [self performSelector:@selector(dismissAlertView:)withObject:alertView afterDelay:2];
}

-(void)dismissAlertView:(UIAlertView *)alertView{
    [alertView dismissWithClickedButtonIndex:0 animated:YES];
}
3 голосов
/ 12 июля 2011

Вы захотите использовать что-то вроде NSUserDefaults, возможно, вот так:

- (void)viewDidLoad
{
    if(![[NSUserDefaults standardUserDefaults] boolForKey:@"com.mycompany.myapp.block_rate_reminder"])// this could be any string as long as it's descriptive enough for you (and match what you use to set, of course)
    {
        alert = [[UIAlertView alloc] initWithTitle:@"Rate!" message:@"Your rate is much apreciated" delegate:self cancelButtonTitle:@"Not Now" otherButtonTitles:@"Okay!   ", @"No, Thanks!", nil ];
        [alert show];
        [alert release];
    }
}



-(void)alertView:(UIAlertView *) alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

    if (buttonIndex == 0) {

    }

    if (buttonIndex == 1) {

        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunes.apple.com/pt/app/designertools/id444778173?mt=8#" ]];

    }

    if (buttonIndex == 2)
    {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"com.mycompany.myapp.block_rate_reminder"];
    }
}
2 голосов
/ 11 июля 2011

Сначала добавьте еще один оператор if, проверяющий buttonIndex 2. Затем, я полагаю, вы захотите использовать класс NSUserDefaults для хранения BOOL. Затем установите для этой BOOL значение NO, если нажать кнопку «Нет, спасибо». Проверьте значение этой BOOL в методе viewdidLoad и отображайте предупреждение только в том случае, если BOOL читает YES.

...