2012-07-03 29 views
0

我有一个主从应用程序,在masterViewControllerdetailview中有一个tableview,你可以编辑和添加信息到文本框等等。我在详细视图中有一个保存按钮rightBarButtonItem。如果他们没有保存他们的工作,他们回来了,我有一个UIAlertView弹出问他们是否想要保存他们的工作。在alertview后面,detailview仍然被解除,并且masterviewcontroller现在正在显示。tableview在masterview中的reloaddata从详细视图

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

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

我不能就这么叫[tableview reloadData]因为,因为它是拉动从文本框的所有信息保存到plist中,如果他们推保存在alertview的alertViews委托设置为的DetailView。有没有一种方法可以从我的alertView中调用[tableView reloadData]

+0

在这两种情况下保存是否失败?即来自'rightBarButtonItem'和'alertView'?另外,你为什么在'alertView'被解散之前解雇'detailView'? –

+0

没有保存正在为rightBarButtonItem工作。 detailView被自动解雇,因为我正在使用主 - 细节应用程序模板。我明白了,我在下面写了我的解决方案。谢谢你的时间。除非您知道延迟detail-view在主 - 从应用程序模板中被解散的方法。 -cheers –

回答

1

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

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

然后我走进我的UIAlertView中保存方法,并呼吁reloadData在masterViews的tableView

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

这很像从tableView indexPath.row这样传递的信息在详细信息视图数组或字典(这也在方法tableView:didSelectRowAtIndexPath:中)

self.detailViewController.detailItem = object; 
0

设置tableview的财产,并尝试

[self.tableView reloadData] 
+0

我不能做self.tableView,因为alertViews Delegate是DetailView,因此当我调用self时,它认为我调用的是detailView而不是masterView(tableView所在的位置) –

0

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

  • 创建一个协议,
  • 为例如创建内部的一个方法- (void) updateMyMasterTable;
  • 在您的详细信息类&中创建一个代理实例,如id <ProtocolName> obj;写入.h文件。
  • 合成它。
  • 当你要重新加载你主人的实现代码如下呼叫[obj updateMyMasterTable];
  • 在您的大师班.m文件实现- (void) updateMyMasterTable方法&调用[tableView reloadData];
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'sviewWillAppear方法,[self.tableView reloadData]应该工作。

相关问题