1

私は目的のcおよびios開発にまったく慣れていません。ストーリーボードの新しいシーンに移動しようとしているだけで、移動時にUIlabelのテキストを何かに変更しています。

この設定方法は、ビュー コントローラーとテーブルビュー コントローラーがあり、それぞれに独自のヘッダー ファイルと実装ファイルがあります。ビューコントローラーのボタンからセグエを使用して、テーブルビューに移動しています。

このスタック オーバーフローの投稿 (ストーリーボード セグエ間で情報を渡すにはどうすればよいですか? ) を読みました。セグエで値を渡す方法を説明し、そのように実装しました。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    NSLog(@"prepareForSegue: %@", segue.identifier);
    if([segue.identifier isEqualToString:@"navtotablebut"])
    {
        TableViewController *testcontroller = segue.destinationViewController;
        testcontroller.testpass.text = @"Testing123";


        NSLog(@"%@",[NSString stringWithFormat:@"testpass has been changed to %@",      testcontroller.testpass.text]);
    }
}

ログは、このセグエ メソッドが呼び出されることを確認し、指定した ID (navtotablebut) を正しく識別できることを確認します。次に、テーブルビュー コントローラーの UIlabel のテキスト プロパティの値を単純な文字列 "Testing123" に設定しようとしました。ただし、この変更は新しい画面に反映されないだけでなく、その後の print ステートメントは testcontroller.testpass.text が (null) と等しいと考えているようです。

ここで何かひどく間違ったことをしていますか?

4

3 に答える 3

2

「TableViewController」のビューが描画される前に、testcontrollerラベルの値を設定しています。TableViewController

注意:viewdidLoadまたはviewDidLayoutSubviewsAutolayout を使用している場合は、ビューを更新してください。

最善の方法は、値を文字列として他のView Controllerに渡してから入力することです。

于 2013-09-24T13:07:06.093 に答える
1

prepareForSegue: メソッドでターゲット ビュー コントローラへの参照を取得し、そこに必要なオブジェクトを渡すだけです。ここに例があります...

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
    {
        // Get reference to the destination view controller
        YourViewController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        [vc setMyObjectHere:object];
    }
}

また、performSegueWithIdentifier:sender: メソッドを使用して、選択またはボタンの押下に基づいて新しいビューへの遷移をアクティブにします。

// When any of my buttons are pressed, push the next view
-(IBAction)buttonPressed:(id)sender
{
    [self performSegueWithIdentifier:@"MySegue" sender:sender];
}

// This will get called too before the view appears
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"MySegue"]) {

        // Get destination view
        SecondView *vc = [segue destinationViewController];

        // Get button tag number (or do whatever you need to do here, based on your object
        NSInteger tagIndex = [(UIButton *)sender tag];

        // Pass the information to your destination view
        [vc setSelectedButton:tagIndex];
    }
}
于 2013-09-24T12:58:15.400 に答える