2011-12-30 29 views
9

Tôi đã nhìn thấy các câu hỏi tương tự ở đây, nhưng không có câu trả lời rõ ràng. Vì vậy, tôi có một chế độ xem đăng nhập phương thức với biểu mẫu tên người dùng/mật khẩu cổ điển, nút đăng nhập Facebook và nút Đăng ký mà tôi muốn hiển thị khi người dùng khởi động ứng dụng lần đầu tiên. Từ những gì tôi tìm thấy có hai cách để thực hiện điều này, với shortcumings.Thực hành tốt nhất về hiển thị màn hình đăng nhập một lần với các bảng phân cảnh

  1. trong AppDelegate's didFinishLaunchingWithOptions a có điều kiện được đặt để kiểm tra xem người dùng có đăng nhập hay không. Nếu không rootViewController được đặt thành loginViewController. Sau khi đăng nhập thành công, một khoảng cách sẽ diễn ra ở chế độ xem chính của ứng dụng. Vấn đề của tôi với aproach này là tôi không chắc chắn làm thế nào để thiết lập lại rootViewController để xem chính. Điều đó có thể và làm thế nào?

Có cách nào khác để hiển thị phương thức đăng nhập mà không đặt rootViewController không? Có nghĩa là tôi sẽ giữ rVC với quan điểm chính.

  1. trong bộ điều khiển giao diện chính trong viewDidAppear một kiểm tra điều kiện nếu người dùng đang đăng nhập. Nếu không phải là một segue đến loginVC được thực hiện. Khi người dùng đăng nhập thành công, anh ta quay trở lại chế độ xem chính đã loại bỏ chế độ xem đăng nhập phương thức. Vấn đề với aproach này là quan điểm chính được hiển thị ngắn gọn, mà tôi không muốn làm.

  2. Bất kỳ ý tưởng nào khác? Xin vui lòng cho tôi biết thực hành tốt nhất khi nói đến kịch bản này là gì. Cảm ơn bạn trước,

+1

Có một số câu trả lời hay ở đây: http://stackoverflow.com/questions/19962276/best-practices-for-storyboard-login-screen-handling-clearing-of-data-upon-logou –

Trả lời

1

Bạn có thể đặt rootViewController qua appdelegate bằng cách đơn giản thiết lập một bộ điều khiển chuyển hướng, và khi bạn làm việc kiểm tra, thiết lập các điểm điều khiển chuyển hướng gốc để bất cứ xem bạn muốn được hiển thị ở thời gian đó. Tôi nghĩ rằng một cái gì đó như thế này nên làm việc nếu bạn thêm một câu lệnh if cho những gì bạn muốn làm:

// Override point for customization after application launch. 
    RootViewController *rootController = [[RootViewController alloc] initWithNibName:nil bundle:nil]; 

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootController]; 

    self.window.rootViewController = navigationController; 
+0

Vâng tôi biết thiết lập rootViewController trong appDelegate. Vấn đề của tôi là về việc đặt lại rootViewController sau khi đăng nhập diễn ra với bộ điều khiển xem chính của ứng dụng. Bạn không chắc chắn làm thế nào mà được thực hiện và nếu nó được khuyến khích để làm phương pháp này. –

+0

Tại sao cần thiết nó là rootViewController sau khi đăng nhập? –

+0

Chủ yếu là do không có chế độ xem Đăng nhập trong khung nhìn. Ngoài ra để có thể làm những việc như bật tắt tất cả các bộ điều khiển xem cho đến khi gốc nếu tùy chọn đó là cần thiết sau này trong sự phát triển. –

3

Sau khi thử nhiều phương pháp khác nhau, tôi đã có thể giải quyết vấn đề này với điều này:

-(void)viewWillAppear:(BOOL)animated { 

    // Check if user is already logged in 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    if ([[prefs objectForKey:@"log"] intValue] == 1) { 
     self.view.hidden = YES; 
    } 
} 

-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 

    // Check if user is already logged in 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    if ([[prefs objectForKey:@"log"] intValue] == 1) { 
     [self performSegueWithIdentifier:@"homeSeg3" sender:self]; 
    } 
} 

-(void)viewDidUnload { 
    self.view.hidden = NO; 
} 
3

Theo tôi, chiến lược tốt nhất cho một thứ như thế này là màn hình đăng nhập đã được trình bày trên bộ điều khiển chế độ xem chính khi ứng dụng khởi chạy và bị loại bỏ độc đáo và bị deallocated sau khi người dùng đăng nhập. Tôi đã tìm thấy hầu hết các giải pháp được đề xuất trước đây (cũng như các gợi ý ở đây: Best practices for Storyboard login screen, handling clearing of data upon logout) không thực hiện điều này một cách trang nhã.

Sau một số thử nghiệm ngày hôm qua, tôi nghĩ rằng cách tốt nhất để làm điều này là sử dụng xem con điều khiển:

1. Chọn kịch bản Giao diện chính của bạn trong Xcode cũng giống như bạn bình thường (không có cần phải thêm bất cứ điều gì để bạn appDelegate

main interface

2. Thêm dòng sau để điều khiển giao diện chính của bạn trong viewDidLoad:

// If user is not logged in, show login view controller 
if (!isLoggedIn) { 
    // Instantiate Login View Controller from storyboard 
    UIStoryboard *mainSB = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; 
    UIViewController *loginVC = [mainSB instantiateViewControllerWithIdentifier:@"Login"]; 

    // Set the Login View Controller's frame 
    loginVC.view.frame = self.view.bounds; 

    // Add login screen as a subview and as a child view controller 
    [self.view addSubview:loginVC.view]; 
    [self addChildViewController:loginVC]; 
    [loginVC didMoveToParentViewController:self]; 

    // Maintain a reference to the Login screen so we can dismiss it later 
    _loginVC = loginVC; 
} 

3. Sau khi người dùng đã đăng nhập, hãy thông báo điều khiển giao diện chính của bạn bằng cách sử dụng thông báo hoặc một đại biểu. Sau đó, bạn có thể tạo hiệu ứng cho màn hình đăng nhập bằng bất kỳ cách nào bạn muốn.Ở đây tôi đang sử dụng một hình ảnh hòa tan:

// Animate out the category chooser 
[UIView animateWithDuration:0.2 animations:^{ 
    // Dissolve the login screen away 
    [_loginVC.view setAlpha:0]; 
} completion:^(BOOL finished) { 
    // Remove login screen as a child view controller 
    [_loginVC willMoveToParentViewController:nil]; 
    [_loginVC.view removeFromSuperview]; 
    [_loginVC removeFromParentViewController]; 

    // nil out property 
    _loginVC = nil; 
}]; 

Và đó là nó! Bằng cách này, bộ điều khiển chế độ xem chính luôn là bộ điều khiển chế độ xem gốc của cửa sổ, màn hình đăng nhập được deallocated sau khi người dùng đăng nhập và không có nhấp nháy khi lần đầu trình bày màn hình đăng nhập.

Các vấn đề liên quan