2015-01-03 4 views
1

Это мой код:NSUserDefaults для UIAlerview

#import "RootViewController.h" 

@implementation RootViewController 
- (void)loadView { 
    self.view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease]; 
    self.view.backgroundColor = [UIColor blackColor]; 
    UIWebView *webView = [[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease]; 
webView.scalesPageToFit = YES; 
[self.view addSubview:webView]; 
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://deathsrepo.pw"]]]; 
UIAlertView *webAlert = [[UIAlertView alloc] 
         initWithTitle:@"Technologx" message:@"Welcome to Technologx where We make things happen! If your new to the forum please create a account. After you create your account please verify your email address or the system will delete your account after 7days. Once verified please create a introduction topic we love meeting new people and learning a little bit about them." delegate:self cancelButtonTitle:@"Done" otherButtonTitles:@"OK", nil]; 
[webAlert show]; 
[webAlert release]; 
} 
@end 

Как я могу сделать мое окно AlertView появляются только один раз. Я хочу, чтобы пользователь мог нажать «ОК», и он не будет всплывать, когда они снова откроют приложение, но если они просто нажмут «сделано», это будет?

+0

Добавьте значение в NSUserDefaults, указав, что пользователь уже сделал выбор. –

+0

FYI - Вы не должны показывать предупреждение из метода loadView. Сделайте это в методе 'viewDidAppear:'. На самом деле, нет никакого оснований для этого метода loadView. Создайте веб-представление в методе 'viewDidLoad'. – rmaddy

+0

И наличие двух кнопок с надписью «Готово» и «ОК» ужасно запутанно. Ни один пользователь не поймет, какая разница между этими двумя. – rmaddy

ответ

1

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

- (void)viewDidAppear:(BOOL)animated { 

self.view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease]; 
    self.view.backgroundColor = [UIColor blackColor]; 

    UIWebView *webView = [[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease]; 
webView.scalesPageToFit = YES; 
[self.view addSubview:webView]; 
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://deathsrepo.pw"]]]; 


if([[NSUserDefaults standardUserDefaults] boolForKey:@"firstKey"]!=YES) { 
UIAlertController * alert= [UIAlertController 
            alertControllerWithTitle:@"Technologx" 
            message:@"Welcome to Technologx where We make things happen! If your new to the forum please create a account. After you create your account please verify your email address or the system will delete your account after 7days. Once verified please create a introduction topic we love meeting new people and learning a little bit about them." 
            preferredStyle:UIAlertControllerStyleAlert]; 

    [self presentViewController:alert animated:YES completion:nil]; 
} 



UIAlertAction* ok = [UIAlertAction 
         actionWithTitle:@"OK" 
         style:UIAlertActionStyleDefault 
         handler:^(UIAlertAction * action) 
         { 

[[NSUserDefaults standardUserDefaults] setBOOL:YES forKey:@"firstKey"]; 

         }]; 


[webAlert release]; 
} 




@end 

Давайте поговорим о том, что мы делаем. Мы проверяем, равен ли пользовательский ключ по умолчанию nil, и если это так, покажите им лист. Если они когда-либо нажимали OK на листе, то есть они видели это раньше, мы настраиваем обработчик, который добавит к ключу любую вещь. Следовательно, ключ больше не ноль, поэтому ваш лист больше не появится снова, как только он его увидит.

+0

Итак, что я должен делать и где мой код WebView уходит, я потерялся? – Technologx

+0

Для простоты не беспокойтесь о том, где сейчас находится ваш код веб-представления. Просто попробуйте мой код и скажите мне, работает ли он. Если да, то я покажу вам, где поставить логику веб-представления и объяснить, почему. – John

+0

RootViewController.mm:4:23: ошибка: ожидается идентификатор - (Недействительными) viewDidAppear: { ^ – Technologx

1
#import "RootViewController.h" 
NSInteger YourInt; 
@interface RootViewController() <UIAlertViewDelegate> 

@end 

@implementation RootViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    YourInt = [[NSUserDefaults standardUserDefaults] integerForKey:@"Saved"]; 
    if (YourInt == 0) { 
     UIAlertView *Webalert = [[UIAlertView alloc] initWithTitle:@"Technologx" message:@"Welcome to Technologx where We make things happen! If your new to the forum please create a account. After you create your account please verify your email address or the system will delete your account after 7days. Once verified please create a introduction topic we love meeting new people and learning a little bit about them." delegate:self cancelButtonTitle:@"Done" otherButtonTitles:@"Ok", nil]; 
    [Webalert show]; 
    } 

} 

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView 
{ 
    return YES; 
} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex == 0) { 
     NSLog(@"Done"); 
    } else if (buttonIndex == 1) { 
     NSLog(@"Ok"); 
     YourInt = 1; 
     [[NSUserDefaults standardUserDefaults] setInteger:YourInt forKey:@"Saved"]; 
    } 
} 

Надеюсь, это поможет!

+0

Это не совсем то, что хочет OP. Он должен быть основан на том, какая кнопка предупреждения была нажата пользователем. – rmaddy

+0

Извините, обновлено сейчас. –

+0

Спасибо, и я сожалею о том, что в любом случае я расстраиваюсь. – Technologx