0

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

问题故事板

我想使用模型segue。通过单击“年份”按钮,它应该转到“年份视图控制器”,单击表格单元格并将屏幕设置为初始视图控制器,在视图控制器中设置标签 1。

人.h

#import <Foundation/Foundation.h>

@interface CarObj : NSObject

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

@end

之后单击名称按钮,它应该转到名称视图控制器,单击它应该将单元格的信息保存到 Person.h 的“名称”参数中。

如何实施?我无法设置标签 1 和标签 2....

对于我正在使用的segue:

-(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,对其进行配置,然后将其丢弃。

您想要做的是将代理属性添加到年份和名称视图控制器,并将您自己MenuViewController设置为prepareForSegue:. 然后,在行选择中,您将执行以下操作:

[self.delegate setCurrentCar:c];

而不是您当前正在使用的mvc.

于 2013-08-22T14:35:01.463 回答