2012-01-27 10 views
7

Tôi có ứng dụng ios5 được phát triển bằng bảng phân cảnh hiện đang hiển thị chế độ xem bộ điều khiển thanh tab khi khởi chạy ban đầu. Tôi muốn hiển thị màn hình đăng nhập trước khi bộ điều khiển thanh tab được hiển thị. Người dùng sẽ nhập tên người dùng của mình là & mật khẩu, sau đó hệ thống sẽ xác thực người dùng và sau đó nếu thành công, hãy hiển thị bộ điều khiển thanh tab.Bật chế độ xem đăng nhập trước khi trình điều khiển thanh tab được hiển thị

Tôi đã thử 3 tùy chọn sau không có may mắn .. bất kỳ ý tưởng nào?

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    // Option 1 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    PointsViewController *firstVC = [[tabBarController viewControllers] objectAtIndex:0]; 
    UIViewController *loginViewController = [[LoginViewController alloc] init]; 
    [firstVC.navigationController pushViewController:loginViewController animated:YES]; 

    // Option 2 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    UIViewController *loginViewController = [[LoginViewController alloc] init]; 
    [tabBarController presentViewController:loginViewController animated:NO completion:nil]; 

    // Option 3 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    UIViewController *loginViewController = [[LoginViewController alloc] init]; 
    [tabBarController presentModalViewController:loginViewController animated:NO]; 

    return YES; 
} 

Trả lời

18

Cuối cùng figured này ra .. đây là những gì bạn cần làm:

  1. Thêm một cái nhìn đăng nhập độc lập để kịch bản này.

  2. Chọn chế độ xem đăng nhập và trong trình kiểm tra thuộc tính, hãy chọn 'Bộ điều khiển chế độ xem ban đầu'. Thao tác này sẽ chuyển chế độ xem ban đầu được khởi chạy từ trình điều khiển tab sang chế độ xem đăng nhập, do đó giải quyết toàn bộ vấn đề hiển thị màn hình đăng nhập trước tiên.

  3. Thêm nút vào chế độ xem đăng nhập và tạo một khoảng cách để tải trình điều khiển tab khi nhấn nút. (Hoặc bạn có thể tạo một khoảng cách từ chế độ xem đăng nhập đến chế độ xem trình điều khiển tab và lập trình gọi hàm segue nếu cần).

  4. Chọn giao diện đăng nhập và chọn tùy chọn Editor> Nhúng Trong> Điều hướng điều khiển

  5. Trong các thuộc tính thanh tra cho bộ điều khiển Navigation, bỏ chọn các 'Hiển thị Navigation Bar' tùy chọn (đây là một sự thay đổi mỹ phẩm; Tôi giả sử bạn không cần một thanh điều hướng hiển thị trên màn hình đăng nhập !!)

đó là nó :)

+0

làm cách nào để chuyển giá trị cho thanh điều khiển đầu tiên của thanh tab bằng cách sử dụng segue? Tôi không thể làm cho nó hoạt động – meda

+0

bạn không vượt qua một giá trị với segue. Một tùy chọn có thể là lưu trữ giá trị bạn muốn chuyển dưới dạng thuộc tính trên AppDelegate của bạn và chỉ cần truy cập giá trị từ chế độ xem đích. –

+0

Nó hoạt động! Nhưng làm thế nào để vô hiệu hóa push to new window nếu password không chính xác? – Gank

0

Bạn có thể sử dụng chế độ xem phương thức. Bạn có thể kiểm tra xem người dùng đã đăng nhập chưa. Nếu không, bạn có thể sử dụng chế độ xem phương thức để nhận thông tin đăng nhập. Bạn có thể tạo UIViewController trong bảng phân cảnh và sau đó sử dụng phương thức instantiateViewControllerWithIdentifier: để tạo màn hình đăng nhập từ bảng phân cảnh. Sau đó chỉ cần hiển thị nó một cách bình thường.

+0

Và bạn sẽ khởi chạy cửa sổ phương thức từ đâu? Phương thức viewDidAppear của tab đầu tiên? Có cách nào để khởi chạy cửa sổ phương thức trước khi các tab được tải không? –

+0

Nếu bạn muốn nó hiển thị trước khi mọi thứ được hiển thị, thì bạn sẽ sử dụng viewWillAppear để thực hiện kiểm tra và khởi chạy chế độ xem phương thức. Sau khi bạn mở một bộ điều khiển chế độ xem mới/xem chế độ chờ đợi cho đến khi chế độ xem phương thức được đóng lại. Phương thức sẽ nằm trong bộ điều khiển xem gốc của trình điều khiển tab chứ không phải bộ điều khiển tab. Nếu cần thiết này có thể được đặt vào mỗi bộ điều khiển xem gốc của bạn kiểm soát tab hoặc bạn có thể phân lớp UIViewControl và sử dụng nó cho mỗi. – Rob

+1

Tôi đã thử cách này. Những gì tôi thấy xảy ra là tab ban đầu được nạp và sau đó cửa sổ phương thức được phủ lên trên nó. Hình ảnh này không dễ chịu. Tôi muốn người dùng nhìn thấy cửa sổ đăng nhập trước tiên. Tôi đã khởi chạy chế độ xem đăng nhập được thực hiện từ phương thức viewWillAppear trên tab đầu tiên. Đây là mã của tôi.

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // Display the login view modally [self performSegueWithIdentifier:@"ShowLogin" sender:self]; }

0

tôi gặp vấn đề này chỉ là bây giờ và tôi đã hoàn toàn giải quyết điều này bằng cách thêm đoạn mã sau, mà bạn cũng không sử dụng.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    ... 
    [self.window makeKeyAndVisible]; 
}