2013-09-02 48 views
6

Tôi đang cố truy cập bộ điều khiển chế độ xem mới trước khi bộ điều khiển chế độ xem hiện tại xuất hiện nhưng dường như không thể nhận được. Về cơ bản ứng dụng của tôi, bắt đầu trên một trang splash và kiểm tra nếu bạn có một NSUserDefaults đã lưu và nếu có nó sẽ mở bộ điều khiển xem chính. Tuy nhiên tôi không muốn người dùng thấy chế độ xem đó trước khi nhìn thấy chế độ xem chính khi họ đã là người dùng, nó không thân thiện với người dùng. Tôi muốn người dùng hiện tại xem hình ảnh khởi chạy và sau đó là chế độ xem chính trực tiếp. Tuy nhiên tôi thực sự không thể làm được điều đó. Đây là những gì tôi đã làm mà tạo ra hiệu ứng không mong muốn.Có một bộ điều khiển xem khác trước khi bộ điều khiển chế độ xem hiện tại xuất hiện

- (void)viewDidAppear:(BOOL)animated { 
[super viewDidAppear:animated]; 
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSString *user = [prefs stringForKey:@"userName"]; 

if(user.length>0){ 
    NSLog(@"Going straight to main %s", "Yes"); 
    [self performSegueWithIdentifier:@"startMain" sender:self]; 

    } 
} 

Tôi làm cách nào để giải quyết vấn đề này?

Trả lời

-3

thử điều này trong appdelegate bạn

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

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSString *user = [prefs stringForKey:@"userName"]; 
    if(user.length>0){ 
     NSLog(@"Going straight to main %s", "Yes"); 
     [self performSegueWithIdentifier:@"startMain" sender:self]; 

    } else { 
     self.window.rootViewController = splashScreenViewController; 
    } 
} 
+1

cảm ơn người trợ giúp. Tôi đang thử mã của bạn và nó không có vẻ như appdelegate biết phương thức performSegueWithIdentifier. Tôi giả sử nó là một phương thức theo hệ thống phân cấp viewcontroller. –

1

Để đạt được những gì bạn muốn, i. e., không thấy viewController đầu tiên ở tất cả, bạn phải loại bỏ các hình ảnh động trong quá trình chuyển đổi. Nếu không có hoạt ảnh, người dùng sẽ thấy như là secondViewController được trình bày đầu tiên.

Bạn có thể đạt được điều này theo nhiều cách. Một trong số chúng (giả sử nó là một phương thức), sẽ tạo ra một phân đoạn mới trong bảng phân cảnh, với một mã định danh khác và không có hoạt ảnh, và gọi nó nếu điều kiện của bạn là đúng.

Nó sẽ là một cái gì đó như thế này:

- (void)viewDidAppear:(BOOL)animated { 

    [super viewDidAppear:animated]; 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSString *user = [prefs stringForKey:@"userName"]; 

    if(user.length>0){ 
     NSLog(@"Going straight to main %s", "Yes"); 
     [self performSegueWithIdentifier:@"startMain-noAnimation" sender:self]; 
     } 
} 
+0

Bạn không thể làm điều này trong viewDidLoad - bạn sẽ nhận được một lỗi nói rằng bạn đang cố gắng trình bày một bộ điều khiển xem trong khi đang trình bày khác. Bạn phải để nó trong viewDidAppear, nhưng không có hình động như bạn đã nói. – rdelmar

+0

Thật khó xử, bởi vì tôi có một dự án trình bày một màn hình đăng nhập phương thức bên trong 'viewDidLoad' (thông qua' presentViewController: animated: completion: '). Bộ điều khiển của tôi nằm bên trong một tabBarController, tôi không biết nếu điều này có cái gì đó để làm –

+0

Bạn có chắc chắn rằng bạn đã làm điều đó trong viewDidLoad? Tôi chỉ cần thử nghiệm này trên một bộ điều khiển trong tab đầu tiên của một điều khiển thanh tab, và tôi đã nhận lỗi: "Cảnh báo: Cố gắng trình bày trên có xem không có trong hệ thống phân cấp cửa sổ ! " Tôi nhận được cùng một lỗi nếu tôi thử nó trong viewWillAppear. – rdelmar

0

tôi đã tìm ra một cách để làm điều đó bằng cách sử dụng appdelegate và id kịch bản này. Đây là những gì tôi đã làm.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 

    //Check to see if this is a current user or a new user 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSString *user = [prefs stringForKey:@"userName"]; 

    //Current User 
    if(user.length>0){ 
     self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 

     UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"2"]; 

     self.window.rootViewController = viewController; 
     [self.window makeKeyAndVisible]; 

    } else { 
     self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 

     UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"1"]; 

     self.window.rootViewController = viewController; 
     [self.window makeKeyAndVisible]; 
    } 


    return YES; 
} 
Các vấn đề liên quan