0

http://i.stack.imgur.com/TaNjH.png

問題のストーリーボード

モデルセグエを使いたい。「Year」ボタンをクリックすると、「Year View Controller」に移動し、テーブル セルをクリックすると、画面が初期ビュー コントローラに設定され、ビュー コントローラにラベル 1 が設定されます。

Person.h

#import <Foundation/Foundation.h>

@interface CarObj : NSObject

@property (nonatomic, strong) NSMutableString *Year;
@property (nonatomic, strong) NSMutableString* Name;

@end

その後、[名前] ボタンをクリックすると、Name View Controller に移動し、クリックすると、セルの情報が Person.h の 'Name' パラメータに保存されます。

これを実装する方法は?ラベル 1 とラベル 2 を設定できません。

私が使用しているセグエのために:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([[segue identifier] isEqualToString:@"GrabYear"])
{
YearViewController *yvc = [segue destinationViewController];
[yvc setCurrentCar:currentCar];
}
}

そして、私が使用している行選択のために:

MenuViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MenuSB"];
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
CarObj *c = [cars objectAtIndex:[path row]];
[mvc setCurrentCar:c];

[mvc viewDidLoad]; // I am not getting previous view loaded automatically
[self dismissViewControllerAnimated:YES completion:^{}];

currentCar.year で取得している文字列は、[yearLabel setText:currentCar.year]; を使用してラベルを設定できません。

4

2 に答える 2

3

[コントローラー ビュー] へのコントローラーの呼び出しは、API の一連のイベントで発生していません。したがって、最初に子コントロールをロードせずにビューのサブコントロールに設定した値は上書きされ、謎に悩まされます。

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{ 
    id vc = [segue destinationViewController];
    MyController *controller = (MyController*)vc;

    //You'll need lazy load controller child controls "now"! with this method call
    [controller view];

    //now you can set controls 
    controller.myLabel.text = @"Value will now persist";

    //note objects not owned by the "view" can be set here without the hack
   controller.myContextSting = @"This value will persist without the hack";
}
于 2013-10-17T17:13:33.780 に答える
0

あなたの問題はこのコードです:

MenuViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MenuSB"];
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
CarObj *c = [cars objectAtIndex:[path row]];
[mvc setCurrentCar:c];

[mvc viewDidLoad]; // I am not getting previous view loaded automatically
[self dismissViewControllerAnimated:YES completion:^{}];

の新しいインスタンスを作成しているためMenuViewController、構成してから破棄しています。

あなたがしたいことは、年にデリゲート プロパティを追加し、View Controller に名前を付けて、MenuViewControllerセット自体をデリゲートとしてprepareForSegue:. 次に、行の選択時に次のようにします。

[self.delegate setCurrentCar:c];

現在行っていることの代わりにmvc.

于 2013-08-22T14:35:01.463 に答える