3

こんにちは私はプログラムでボタンを作成し、ボタンを別のビューに接続しますが、ストーリーボードにprepareForSegueメソッドを使用する必要があるというセグエの問題が発生しましたが、インターネットにサンプルがどのようにあるかわかりませんが、それを使用するとエラーが発生しますサンプル、助けてくれませんか

前もって感謝します!

これが私のコードです

ボタンの作成

 UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; 
        button.backgroundColor=[UIColor colorWithRed: 201.0/255.0 green: 201.0/255.0 blue:201.0/255.0 alpha: 1.0];
        button.tag = currentTag;
        currentTag++;
        [button.layer setBorderColor: [[UIColor blackColor] CGColor]];
        [button.layer setBorderWidth: 1.0];
        [button setTitle:[NSString stringWithFormat:@"%d",currentTag] forState:UIControlStateNormal];
        button.frame = CGRectMake(80*x, 32*y, 80, 32); 
        [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
        [buttonView addSubview: button];

ボタンのアクション

-(void)buttonPressed:(UIButton *)button
{
NSLog(@"button %u -- frame: %@", button.tag, NSStringFromCGRect(button.frame));
WeekView *crtObj=[[WeekView alloc]initWithNibName:@"WeekView" bundle:nil];
[self.navigationController pushViewController:crtObj animated:YES];
[crtObj release];


}

セグエの準備

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"WeekView"]) {

        // Get reference to the destination view controller
       WeekView *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        [vc setMyObjectHere:object];  //// I don't know what should I write instead of object
    }}

エラー

ここに画像の説明を入力してください

編集2:****警告があります:

ビューコントローラから直接開始されたセグエには、-[UIViewController PerformSegueWithIdentifier:sender:]で使用する識別子が必要です。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"WeekView"]) {

        // Get reference to the destination view controller
     //  WeekView *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
       // [vc setMyObjectHere:object];
    [segue.destinationViewController setTitle:@"WeekView"];
    }}
4

3 に答える 3

11

ビューコントローラをナビゲーションコントローラにプッシュする方法は実際には2つあります。

  1. 古い方法、すべてコードで。それがあなたがしたことです。この時点でセグエを完全に忘れることができます。

  2. 新しい方法:ストーリーボードでセグエを確立し(1つのビューコントローラーから新しいビューコントローラーにセグエをプッシュします。これもストーリーボードで定義します)、Identifier名前を付けてから、このコードを使用してビューコントローラーをプッシュします。

[self performSegueWithIdentifier:myIdentifyer sender:self];

ここで、selfはビューコントローラーです。これで、でカスタマイズを行うことができますprepareForSegue:

于 2012-06-21T09:28:58.170 に答える
4

この場合のサンプルコードは、で実行できることのタイプを示しているだけですprepareForSegue:sender:

これは、セグエしようとしているviewControllerにメソッドがsetMyObjectHere:あり、そのオブジェクトを渡すことを期待していることを示唆しています。

例として、クラスにsetTitle:メソッドがあり、prepareForSegue:sender:コードで、セグエを実行しているコントローラーの情報に基づいてタイトルを事前設定できます。

警告を取り除くには、次の図のように識別子が必要です。

ここに画像の説明を入力してください

于 2012-06-21T09:20:24.310 に答える
0

「古いコーディング方法」、これが役立つことを願ってコーディングするより良い方法はありませんが、プログラムでUIButtonsとUIViewsを使用している場合は、セグエを使用するべきではありません。

次のビューコントローラなどをオン/オフするだけでなく、アプリデリゲートでルートビューコントロールを作成します。

たとえば、ビューコントローラに必要なのはこれだけです。

-(void)nextControllerButton:(UIButton*)button{

    SearchViewController *nextController = [[SearchViewController alloc] init];

    nextController.username = _username.text;
    nextController.password = _password.text;

    [self.navigationController showViewController:nextController sender:self];
}
于 2015-05-11T15:16:04.990 に答える