0

私は使用Facebook SDK 3.1しています、私のログインシステムは大丈夫です、ログインした後、私は他に行きたいですViewController。セグエと識別子の両方に接続しましたが、どうすれば実装できるのかわかりません。

ここで、この後:

if (appDelegate.session.isOpen) {
    [self.buttonLoginLogout setTitle:@"Log out" forState:UIControlStateNormal];        
    [self.textNoteOrLink setText:[NSString stringWithFormat:@"https://graph.facebook.com/me/friends?access_token=%@", appDelegate.session.accessTokenData.accessToken]];
}

TableViewCellの例では、次のように使用しています。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"test"]) {
        NSIndexPath *selectedIndexPath = self.tableView.indexPathForSelectedRow;
        RestauranteDetalhesViewController *destViewController = segue.destinationViewController;
        destViewController.idRest =[bd.idrestauracao objectAtIndex:selectedIndexPath.row];
}

しかし、ここでは(id)senderに与えるインデックスパスがありません。

4

2 に答える 2

3

ファビオ・カルドーゾさん、セグエには 2 種類あります

  1. 少ないセグエをトリガーし、
  2. トリガーされたセグエ

トリガーの少ないセグエでは、ある ViewController から別の ViewController に直接ドラッグするだけです。セグエを実行するアクションについては言及しません。これを行うには、上記のようにセグエ識別子を作成する必要があります。そして、コードで以下の行を呼び出します。

[self performSegueWithIdentifier:@"YOUR_IDENTIFIER" 送信者:self];

セグエの 2 番目の方法では、Ctrl キーを押しながらボタンから別の ViewController に直接ドラッグします。したがって、このためのコードを記述する必要はありません。そのボタンをクリックすると、ストーリーボードで選択したものは何でも、プッシュ、モデル、またはカスタム セグエのいずれかが実行されます。

以下のメソッドが実行される場合、セグエがソース ViewController で呼び出されます。ここでは、独自のコードを記述して、最初の ViewController から別の ViewController またはその他のものに値を渡すことができます。

-(void)prepareForSegue:(UIStoryboardSegue *)segue 送信者:(id)送信者

ViewController からのセグエが複数ある場合は、識別子が役に立ちます。このような識別子を使用できます

if ([segue.identifier isEqualToString:@"YOUR_IDENTIFIER"])

注: セグエは一方向にすぎないため、最初の ViewController から別のビューコントローラーにセグエを作成し、元に戻りたい場合 (モデル アクションの場合)、2 番目の ViewController のデリゲート メソッドを記述し、ボタン アクション コールをクリックする必要があります。

    **FirstViewController.h**

@interface FirstViewController : UIViewController <SecondViewControllerDelegate>
{

}

- (IBAction) buttonTapped:(id)sender;

**FirstViewController.m**

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"YOUR_IDENTIFIER"])
    {
        SecondViewController *svc_obj = segue.destinationViewController;
        svc_obj.delegate = self;
    }
}

- (void) buttonTapped:(id)sender
{
    [self performSegueWithIdentifier:@"YOUR_IDENTIFIER" sender:self];
}

- (void) secondViewControllerDidCancel: (SecondViewController *) controller
{
    [controller dismissViewControllerAnimated:YES completion:nil];
}

**SecondViewController.h**

@class SecondViewController;

@protocol SecondViewControllerDelegate <NSObject>

- (void) secondViewControllerDidCancel: (SecondViewController *) controller;

@end

@interface SecondViewController : UIViewController
{

}
@property (nonatomic, weak) id <SecondViewControllerDelegate> delegate;

- (IBAction)cancelButtonTapped:(id)sender;

**SecondViewController.m**

- (IBAction)cancelButtonTapped:(id)sender
{
    [self.delegate secondViewControllerDidCancel:self];
}

@end
于 2013-03-06T05:04:32.673 に答える
0

この単純な行で問題を解決しました:

 [self performSegueWithIdentifier:@"begin" sender:self];   
于 2013-03-04T15:49:57.130 に答える