我有一个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]
?
答案 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;
id <ProtocolName> obj;
的委托实例。写在.h文件中。[obj updateMyMasterTable];
- (void) updateMyMasterTable
方法&amp;致电[tableView reloadData];