addchildviewcontroller传递数据

时间:2012-08-15 10:25:28

标签: ios xcode parent-child

我正在尝试将数据传递给childviewcontroller。 我有一个带有两个按钮和一个视图的视图控制器。按下按钮可定义显示的视图。 具体情况是我想显示一个项目列表。第一种方式(按钮)位于列表中,第二种方式位于mapview上。显示我需要将一个类别传递给孩子的项目。

在我的viewDidLoad中,我使用addchildviewcontroller添加了两个viewcontrollers,并将我的视图设置为listviewcontroller的视图。

-(void)viewDidLoad
{
    [super viewDidLoad];
    UIStoryboard* sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

    ItemListViewController * itemListViewController = (ItemListViewController *)[sb instantiateViewControllerWithIdentifier:@"ItemList"];
    itemListViewController.view.frame = detailView.bounds;
    [self addChildViewController:itemListViewController];
    [itemListViewController didMoveToParentViewController:self];
    itemListViewController.category = category;

    ItemListMapViewController * itemListMapViewController = (ItemListMapViewController *)[sb instantiateViewControllerWithIdentifier:@"ItemListMap"];
    itemListMapViewController.view.frame = detailView.bounds;
    [self addChildViewController:itemListMapViewController];
    itemListMapViewController.category = category;

    childControllers = [NSArray arrayWithObjects:itemListViewController, itemListMapViewController, nil];

    [self.detailView addSubview:itemListViewController.view];
    currentPage = 0;
}

按下按钮我改变了我的视图

- (IBAction)buttonClicked:(id)sender 
{   
    UIButton * button = sender;
    UIViewController *source = (UIViewController *)[childControllers objectAtIndex:currentPage];
    [source.view removeFromSuperview];
    UIViewController *destination = (UIViewController *)[childControllers objectAtIndex:button.tag - 100];
    [self.detailView addSubview:destination.view];
    currentPage = button.tag - 100;
    button = nil;
}

但是将类别传递给我的childviewcontrollers什么也没做。我的childcontrollers中的类别始终为null。 我还试图通过访问childviewcontroller上的parentviewcontroller来获取类别,

NSLog(@"::%@", ((ItemListHeaderViewController *)self.parentViewController).category);

但这也会导致null。

我不知道我做错了什么,或者我对整个遏制故事的理解是错误的......我是ios开发的新手,所以如果这个问题很愚蠢,请不要开枪。 :)这也是我关于堆栈溢出的第一个问题,所以如果我做错了也不要再拍了。

帮助将不胜感激。提前致谢。 亲切的问候......

1 个答案:

答案 0 :(得分:0)

在子视图控制器中.h:

@property(nonatomic, strong) NSString *category;

儿童VC .m:

@synthesize category;

然后在父类中获取对该类的引用并设置该属性。我想知道你为什么要在代码中这样做。将这一点放在IB中是非常容易的,并且对我来说更简单易用。