如何从另一个视图控制器调用方法

时间:2015-09-04 04:31:08

标签: ios objective-c uitableview

我正在试图弄清楚如何服用 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; ,方法并从另一个视图控制器调用它。

LocationViewController.m

- (void)viewDidLoad {
  [super viewDidLoad];
  //save bar button item
  UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithTitle: @"Save" style: UIBarButtonItemStylePlain target: self action: @selector(saveButtonPressed)];

  self.navigationItem.rightBarButtonItem = saveButton;

  [self performSelector:@selector(saveButtonPressed) withObject:nil afterDelay:0.25];
}

-(void)saveButtonPressed {

    //I want to call the method here

}

GameDetailsTableViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifer1 = @"GameDetailsLocationCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer1];

    cell.textLabel.text = @"hello world"

    return cell;
}

我是IOS的初学者,我非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

您无法调用cellForRowAtIndexPath,但可以从另一个类触发tableview的数据源方法。继承人如何

假设您想要从B类方法cellForRowAtIndexPath

触发A类someMethod

在班级A.m

-(void)viewDidLoad{
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(somemethodToReloadtableview) name:@"NOTIFICATIONNAME" object:nil];
}
//Implement the method
-(void)somemethodToReloadtableview{
[self.customTableViewName reloadData];
}

班级B.m

-(void)methodFromWhichYouWantToTrigger{
 [[NSNotificationCenter defaultCenter]postNotificationName:@"NOTIFICATIONNAME" object:nil];
}

P.S - 此方法将调用tableview的所有数据源,例如numberOfRows。 希望这有帮助

答案 1 :(得分:0)

我不确定您为什么要手动拨打tableView: cellForRowAtIndexPath:。如果您希望表视图重新加载数据,可以在表视图上调用reloadData方法。

[yourTableView reloadData];

如果您想从另一个视图控制器触发此操作,您可以从其他视图控制器发布通知,并从存在表视图的视图中侦听该通知。 Saheb的回答描述了如何发布通知并听取通知。