从详细信息视图中查看masterview中的tableview reloaddata

时间:2012-07-03 05:31:30

标签: objective-c ios cocoa-touch uitableview ios4

我有一个master-detail应用程序,在masterViewController中有一个tableview,在detailview中你可以编辑并在文本字段中添加信息,依此类推。我在详细信息视图中有一个保存按钮rightBarButtonItem。如果他们没有保存他们的工作并且他们回击我有一个UIAlertView popsup问他们是否想要保存他们的工作。在alertview后面,detailview仍然被解雇,masterviewcontroller现在正在显示。

所以当我点击保存时,tableview不会更新。我的masterviewcontroller [tableview reloadData]中有viewWillAppear但它不起作用,因为在用户可以点击保存之前,视图会出现在alertview后面。我想在这个方法中调用[tableview reloadData](或类似的东西),这是从我的detailview中调用的。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

我不能只调用[tableview reloadData]因为alertViews委托被设置为detailview,因为如果他们在alertview上推送save,它会从textfields中提取所有信息以保存到plist中。有没有办法从alertView调用[tableView reloadData]

4 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,则在点击detailView上的任何按钮之前,您将解除alertView。我不知道您保存数据的位置以及tableView从中检索数据的位置,但请尝试等待alertView上的用户互动。

在弹出alertView要求保存的代码中,不执行任何操作。

- (void)yourBackButtonAction //i assumed this is your method when they hit 'back'
{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title message:@"Would you like to save your work?" delegate:self cancelButtonTitle:@"No"  otherButtonTitles:@"Yes", nil];

    [alertView show];
    [alertView release];
}

在委托方法中,保存数据并关闭detailView

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
     if (buttonIndex == 1) //yes
    {
        //save your data
        [self.navigationController dismissModalViewControllerAnimated:YES];
    }
    else // no
        [self.navigationController dismissModalViewControllerAnimated:YES];
}

现在,在您的masterViewController's viewWillAppear方法中,[self.tableView reloadData]应该有效。

答案 1 :(得分:1)

我明白了。我所做的是在我的DetailViewController.h文件中创建了UITableViewController的属性,并将其命名为masterView,然后在其.m文件中合成它。然后我进入我的masterViewController.m文件并找到方法tableView:didSelectRowAtIndexPath:并将我的detailsViewController.masterView属性设置为self(self为masterViewController)。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
      self.detailViewController.masterView = self;
}

然后我进入了我的UIAlertView保存方法并在masterViews tableView上调用了reloadData

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1) {
        [masterView.tableView reloadData];
    }
}

这非常类似于在tableView indexPath.row的详细视图中将信息传递给数组或字典,如下所示(也在方法tableView:didSelectRowAtIndexPath:中)

self.detailViewController.detailItem = object;

答案 2 :(得分:0)

设置tableview的属性并尝试

[self.tableView reloadData]

答案 3 :(得分:0)

我猜你必须为此创建一个委托方法。

  • 创建协议
  • 在内部创建一个方法,例如- (void) updateMyMasterTable;
  • 在您的详细信息类和&amp;中创建一个类似id <ProtocolName> obj;的委托实例。写在.h文件中。
  • 合成它。
  • 如果您想重新加载主人的tableview来电[obj updateMyMasterTable];
  • 在您的主类.m文件中实现- (void) updateMyMasterTable方法&amp;致电[tableView reloadData];