如何从其他视图重新加载一个视图的表

时间:2013-06-29 14:04:52

标签: iphone objective-c uitableview ios6

我正在尝试从MySliderController.m重新加载MyView.m表,但它没有重新加载。 我在MyView.m

中声明了以下方法
 -(void)updateData{
      [self.itablview reloadData];
 }

并通过下面的代码

调用该方法形成MySliderController.m类
 DDMenuController *menuController = (DDMenuController*)((AppDelegate*)[[UIApplication sharedApplication] delegate]).DDmenuController;
MyView *obj = [[MyView alloc]init];

if(indexPath.row == 3){
    [menuController showRootController:YES];
    [obj updateData];
}

该方法被调用,但即使我通过下面的代码检查tableview的存在,表也没有重新加载

-(void)reloadtable:(id) sender{
    NSlog(@"%@",self.itableview)
    [self.itableView reloadData];
}

在控制台中我得到(null)

但是当我在下面的代码中检查时

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"%@", self.itableView);
}

我收到消息。这意味着表存在

2013-06-29 19:31:48.673 slidingViews[7025:c07] <UITableView: 0x79d9400; frame = (0 0; 320 480); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x714e940>; layer = <CALayer: 0x714e3f0>; contentOffset: {0, 0}>

what can be the issue. Please check my code here 
https://github.com/kanwarpalSingh/mycode

1 个答案:

答案 0 :(得分:1)

您的问题是,当您实例化MyView时,您实际上是在创建一个新的(但不可见)版本的MyView视图控制器,而不是您原来的MyView版本。有几种不同的方法可以解决这个问题,它实际上归结为最适合你的方法。

一个示例是订阅MyView来自MySliderControl的自定义通知,例如此...

MyView.m

- (void)viewDidLoad
{
 [[NSNotificationCenter defaultCenter] removeObserver:self];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateData:) name:@"updateDataOnMyView" object:nil];
}

MySliderControl.m

[[NSNotificationCenter defaultCenter] postNotificationName:@"updateDataOnMyView" object:nil];

如果您不喜欢此设置,也可以使用委托方法。有很多关于创建自己的代表的教程。祝你好运!