2012-09-06 12 views
10

ストーリーボードでIOS 5.1でアプリケーションを完成しようとしています。基本的に私はドロップボックスアプリをやっています。 Dropbox SDK Dropboxへのリンクを使用しているので、AppDelegate.mで処理されます。ユーザーはセッションからリンクを解除し、別のView Controllerで再度リンクすることができるという選択肢があります。だから、毎回ユーザリンクとリンクされていないアプリは、オリジナルのDropboxの例ではAppDelegateでSegueを実行するには?

をrootviewcontrollerする未接続であるDropboxのは、コード

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    if ([[DBSession sharedSession] handleOpenURL:url]) { 
     if ([[DBSession sharedSession] isLinked]) { 
      [navigationController pushViewController:rootViewController.photoViewController animated:YES]; 
     } 
     return YES; 
    } 

    return NO; 
} 

を次のように移行を扱っしかし、私はストーリーボードを使用していますビューコントローラにAppdelegateからビューを切り替えることがありますナビゲーションコントローラと次のいずれかのメソッドが動作していません。メソッドにコメントを挿入します。ここで

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    if ([[DBSession sharedSession] handleOpenURL:url]) { 
     if ([[DBSession sharedSession] isLinked]) { 

      NSLog(@"App linked successfully!"); 
      // At this point you can start making API calls 

      /*UIViewController *viewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL] instantiateViewControllerWithIdentifier:@"MeetingViewController"]; 
      [self.navigationController pushViewController:viewController animated:YES]; */ 

      //[self performSegueWithIdentifier:@"xxxx" sender:self]; 

      /* LoginDropboxViewController *loginController=[[LoginDropboxViewController alloc] initWithNibName:@"LoginDropbox" bundle:nil]; 
      [navigationController pushViewController:loginController animated:YES]; */ 

     } 
     return YES; 
    } 
    // Add whatever other url handling code your app requires here 
    return NO; 
} 

は、どのように私はAppDelegate.hでビューを切り替えることができますアプリ enter image description here

のストーリーボードですか?

注:segueとsegueを追加すると、goToMeetingと言うことができます。 [self performSegueWithIdentifier:@ "goToMeeting" sender:self];私が手

エラーがある:No Visible @interface for 'AppDelegate' declares the selector performSegueWithIdentifier:sender

答えて

12

あなたはおそらくあなたがこのようにそれを行うことができます

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    if ([[DBSession sharedSession] handleOpenURL:url]) { 
     if ([[DBSession sharedSession] isLinked]) { 

      NSLog(@"App linked successfully!"); 
      // At this point you can start making API calls 

      //push view manually 
      UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
      LoginDropboxViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"LoginDropbox"]; 
      [(UINavigationController*)self.window.rootViewController pushViewController:ivc animated:NO]; 



    } 
     return YES; 
    } 
    // Add whatever other url handling code your app requires here 
    return NO; 
} 
5

のために動作します、次のコードをsegueperformではなく、手動でビューを押して検討している場合:

UINavigationController *navigationController = (UINavigationController*) self.window.rootViewController; 

[[[navigationController viewControllers] objectAtIndex:0] performSegueWithIdentifier:@"goToMeeting" sender:self]; 

これは、viewControllers配列のインデックスがビューコントローラのインデックスと一致する場合、およびそれがもちろん存在する場合にのみ機能します。この場合、最初のものが(アレイとストーリーボードの中に)あります。

segue( "goToMeeting")は、アクションに添付してはいけません。これを行う方法は、ストーリーボードシーンの一番下にあるファイル所有者アイコンから目的のシーンにドラッグしてコントロールすることです。 "Manual Segue"でオプションを尋ねるポップアップが表示されます。タイプとして「プッシュ」を選択します。小さな四角形をタップし、Attributes Inspectorにいることを確認します。それをコードで参照するために使用する識別子を与えます。

+3

performSegueWithIdentifierコールにパラメータデータを渡す必要がある場合はどうすればよいですか。私はprepareForSegue()呼び出しを上書きすることはできませんでしたので、アプリケーションの代理人ではないViewControllerですか? – ChaosSpeeder

関連する問題