簡體   English   中英

iOS-重新打開應用程序后導航到主視圖

[英]IOS- navigation to main view after reopening of application

我正在一個iPhone項目中創建登錄頁面。 我希望當用戶每次打開應用程序后登錄到應用程序時,他會自動登錄到應用程序。 現在它正在我的應用程序中運行(用戶ID和密碼已保存),我想在登錄后下次用戶打開該應用程序時,屏幕上顯示的第一個視圖是除登錄視圖之外的主視圖。

我的代碼

- (void)viewDidLoad
    {
        NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
        checked=[standardDefaults boolForKey:@"boxIsChecked"];
        userid.text=[standardDefaults objectForKey:@"email"];
        password.text=  [standardDefaults objectForKey:@"password"];
        [self checkTheBox];
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }



-(IBAction)CheckBtn_click:(id)sender
{

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
if(!checked)
{
    //NSLog(@"The value of the bool is %@\n", (checked ? @"YES" : @"NO"));
    [CheckBtn setBackgroundImage:[UIImage imageNamed:@"pro-checked.png"] forState:UIControlStateNormal];
    checked=YES;
    [standardDefaults setBool:checked forKey:@"boxIsChecked"];
    [standardDefaults setObject:userid.text forKey:@"email"];
    [standardDefaults setObject:password.text forKey:@"password"];
}
else if(checked)
{
    [CheckBtn setBackgroundImage:[UIImage imageNamed:@"Check-Box.png"] forState:UIControlStateNormal];
    checked=NO;
    [standardDefaults setBool:checked forKey:@"boxIsChecked"];
    [standardDefaults setObject:NULL forKey:@"email"];
    [standardDefaults setObject:NULL forKey:@"password"];
}
[standardDefaults synchronize];
}

-(void)checkTheBox
{
if(!checked)
{

    [CheckBtn setBackgroundImage:[UIImage imageNamed:@"Check-Box.png"] forState:UIControlStateNormal];
}
else if(checked)
{
    [CheckBtn setBackgroundImage:[UIImage imageNamed:@"pro-checked.png"] forState:UIControlStateNormal];

}
}

一種方法是在情節提要中添加一個新的視圖控制器,並將其設置為初始視圖控制器(如果使用情節提要)。 然后,為該新視圖控制器創建一個子類,並實現這種邏輯:

// in initial view controller
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    if (isLoggedIn) {
        // user is logged in, so segue straight to the main view
        [self performSegueWithIdentifier:@"main" sender:self];
    } else {
        // user isn't logged in, so segue to login view
        [self performSegueWithIdentifier:@"login" sender:self];
    }
}

然后,您需要將初始視圖控制器中的segue添加到登錄頁面(並將segue標識符設置為login )和主應用程序視圖控制器(並將segue標識符設置為main )。

還要注意,永遠不要將密碼以純文本格式存儲在NSUserDefaults ,因為任何人都可以通過這種方式輕松地訪問它們。 不要那樣做 而是將它們存儲在鑰匙串中。 這是一個很棒的教程,您應該閱讀: http : //www.raywenderlich.com/92667/securing-ios-data-key-keychain-touch-id-1password

將此代碼添加到您的appdelegate(啟動時)

您可以從情節提要中選擇特定的筆尖。 注意-將標識符添加到您的xib。 即[LoginView]在這種情況下

if (isLoggedIn)
{

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    LoginView *loginView=[storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
    UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:loginView];
    [loginView setNavigationBarHidden:YES];
    self.window.rootViewController=loginView;
}
else
{
// your normal login code
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM