如何从父视图调用方法

时间:2011-11-17 04:59:10

标签: iphone objective-c cocoa-touch uitableview

我有一个父视图(表),它将详细信息对象传递给子视图(表)。

父视图有一个网络请求,用于获取数据并将数据传递给子视图。

我希望能够在子视图中更新数据。我想我需要在查看子视图时调用父视图的网络请求方法,并更新子表。这可能吗?

在家长VC中:

- (void)fetchAppointmentsForVisibleDate {   
    self.appointmentArray = [DataSource getTodayData:self.visibleDate];

    NSMutableArray *array = [NSMutableArray arrayWithCapacity:50];
    for (NSDictionary *appointment in self.appointmentArray)
    {
        [array addObject: [NSString stringWithFormat:@"%@: %@", [appointment objectForKey:@"scheduled_time"], [appointment objectForKey:@"patient"]]];
    }
    self.listData = array;

    [self.appointmentTableView reloadData];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ChildVC *vc = [Child VC alloc]initWithNib@"ChildVC"];
    vc.appointmentDictionary = [self.appointmentArray objectAtIndex:path.row];
}

2 个答案:

答案 0 :(得分:1)

您的网络请求是否必须由父视图调用。

如果它只是一种方法,您可以将您孩子的代表设置为父代。 即在父视图中你可以做到

创建子对象,然后执行

child.delegate=self;

并从子级

调用您的网络方法

即[delegate networkMethod];

答案 1 :(得分:0)

好的,我们假设您的代码可以执行以下操作。

在您的子类的.h文件中添加

 {
    id delegate;
 }
  @property(nonatomic,retain) id delegate;

在你孩子的.m文件中做了所有需要的事情,比如合成等等。

现在在你的父类中做

 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
ChildVC *vc = [Child VC alloc]initWithNib@"ChildVC"];
 vc.delegate=self; //here you set the delegate of your child.

vc.appointmentDictionary = [self.appointmentArray objectAtIndex:path.row];
}

现在在你的孩子.m类中,如果你想调用驻留在父视图类中的任何函数,那么就这样做。

 [delegate myNetworkFunction] //it will give warning but dont worry

如果你想要

,你也可以传递参数
 [delegate myNetworkFunction:myArgument];