2012-02-12 16 views
169

にパラメータを渡す:は、私はプログラムでセグエを実行ボタンをしたプログラムでセグエを実行し、私のアプリで、宛先ビュー

- (void)myButtonMethod 
{ 
    //execute segue programmatically 
    [self performSegueWithIdentifier: @"MySegue" sender: self]; 
} 

私は先のビューを参照する方法があるかどうかを知りたいといくつかのパラメータを渡します。

prepareForSegueメソッドでは、私はそれを参照することができます:myDestinationViewController *vc = [segue destinationViewController];しかし、私はどのようにこれをプログラムで実行するのか分かりません。

ご意見はありますか?

おかげで、yassa


UPDATE:

私はこの質問のためにごめんなさい!私は、segueがプログラムで呼び出されたとしても、とにかくprepareForSegueメソッドが呼び出されているので、同じ通常の方法でパラメータを渡すことができます。

+44

この更新プログラムを回答として追加し、受け入れるようにしてください。 – danielbeard

+0

通知を追加して通知してください。 – DanSkeel

+11

あなたは正しい答えとして[下](http://stackoverflow.com/a/10783047/377384)をマークして、人々が答えられたことを知る必要があります。 –

答えて

104

答えは、セグがどのようにトリガーされるかに違いがないことです。

いずれの場合でもprepareForSegue:sender:メソッドが呼び出され、ここでパラメータを渡します。

90

古い質問ですが、ここではあなたが求めていることを行う方法に関するコードです。この場合、選択したセルのデータをテーブルビューで別のビューコントローラに渡しています。 .mファイル内

@property(weak, nonatomic) NSObject* dataModel; 

:TRGETビューの.hファイルで

@synthesize dataModel; 

dataModelstringint、またはこの場合のように、それはそのモデルだ可能

- (void)someMethod { 
    [self performSegueWithIdentifier:@"loginMainSegue" sender:self]; 
} 

OR。 ..

- (void)someMethod { 
    UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeController"]; 
    [self.navigationController pushViewController: myController animated:YES]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if([segue.identifier isEqualToString:@"storyDetailsSegway"]) { 
     UITableViewCell *cell = (UITableViewCell *) sender; 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
     NSDictionary *storiesDict =[topStories objectAtIndex:[indexPath row]]; 
     StoryModel *storyModel = [[StoryModel alloc] init]; 
     storyModel = storiesDict; 
     StoryDetails *controller = (StoryDetails *)segue.destinationViewController; 
     controller.dataModel= storyModel; 
    } 
} 
0

私は、1つの場所でセグを実行し、セグの準備としてパラメータを送信する状態を維持するという問題を理解しています。

私はこれを行う方法を考え出しました。カテゴリを使用してViewControllerにuserInfoDictというプロパティを追加しました。送信者が自己(コントローラ自体を意味する)である場合には、識別子でセグを実行するようにオーバーライドしました。このuserInfoDictを次のViewControllerに渡します。

ここで、UserInfoDict全体を渡す代わりに、特定のパラメータを送信者として渡して、それに応じてオーバーライドすることもできます。

1つのことを覚えておく必要があります。 ur performSegueメソッドでスーパーメソッドを呼び出すことを忘れないでください。

0

新しいスウィフトバージョンを使用する場合。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "ChannelMoreSegue" { 

     } 
} 
関連する問題