0

我有一个主从应用程序,其中有一个表格视图,您可以masterViewController在其中detailview编辑和添加信息到文本字段等。我rightBarButtonItem在详细视图中有一个保存按钮。如果他们没有保存他们的工作并且他们回击我有一个UIAlertView弹出窗口询问他们是否要保存他们的工作。在 alertview 后面,detailview 仍然被关闭,masterviewcontroller 现在正在显示。

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

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

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

4

4 回答 4

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]应该可以工作。

于 2012-07-03T07:12:39.290 回答
1

我想到了。我所做的是UITableViewController在我的 DetailViewController.h 文件中创建一个属性并将其命名为 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;
于 2012-07-03T07:17:49.957 回答
0

设置的属性tableview并尝试

[self.tableView reloadData]
于 2012-07-03T05:48:06.563 回答
0

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

  • 创建协议,
  • 在内部创建一种方法,例如- (void) updateMyMasterTable;
  • 在您的详细信息类中创建一个委托实例id <ProtocolName> obj;并写入 .h 文件。
  • 合成它。
  • 当你想重新加载你的主人的 tableview 调用[obj updateMyMasterTable];
  • 在您的主类 .m 文件中实现- (void) updateMyMasterTable方法和调用[tableView reloadData];
于 2012-07-03T05:51:07.297 回答