使用 UINavigationController 从另一个控制器更新或重新加载 UIViewController?
Posted
技术标签:
【中文标题】使用 UINavigationController 从另一个控制器更新或重新加载 UIViewController?【英文标题】:updating or reloading a UIViewController from another Controller using UINavigationController? 【发布时间】:2011-09-08 00:09:11 【问题描述】:我有一个 ios 应用程序,它有一个 mainControllerView,在那里我创建了一个 UINavigationController,然后我将一个名为 FirstViewController 的新 UIViewController 和其他视图推送到该 UINavController 中。
总之是这样的:
MainController(UIVIewController)
|
--> UINavController
|
--> FirstViewController(UIViewController)
|
--> SecondViewController(UIViewController)
|
--> AddViewController
另外,在 FirstViewController 内我有一个 UITableView,UITableView 由 CoreData 提供。
现在,我决定在右上角(导航栏)添加一个“加号”系统按钮,以将另一行添加到数据库中,因此应该反映到 UITableview 中。
我所做的是创建另一个自定义视图,称为 AddViewController,当我按下“加号”按钮时,它会被推入 NavController 堆栈。在那个视图中,我只是添加了一些文本字段和一个按钮来更新数据库,这是有效的,但是,当我按下返回时,我找不到更新 FirstViewController 内部的 UITableView 的方法。
简而言之,
UINavController(with FirstViewController)
1.-When I press the "+" button another UIViewController (AddViewContronller)
is pushed
2.-In that view I present a few UITextfields to be filled.
3.-I press a "save" button on the NavigationBar, that button save info
into the DB and then it goes back the FirstViewController, popping the current
UIViewController(AddViewController)
4.-FirstViewController and its tableView is on the main screen again, however
the rows are still the same.
当我按下 AddViewController 中的保存按钮时,我一直在尝试更新 FirstViewController,但正如我所说,我没有成功。
我没有尝试过的选项是在我跳转到另一个 UIViewController 时释放 FirstViewController,然后在后面重新分配,但我不认为这是一个好主意,因为使用 NavigationController 我可以跟踪我的所有视图控制器入栈。
所以任何人都知道我应该怎么做才能从另一个 UIViewController 刷新/重新加载视图 (UIViewController),在我的情况下从 AddViewController 更新 FirstViewController 视图?
另外,我想知道我是否在正确的轨道上?或者我想做的事情可以很容易地用另一种方法来完成,比如模态对话框?
任何帮助将不胜感激
干杯, 劳尔
【问题讨论】:
你使用 NSFetchedResultsController 来填充你的表格视图吗? 不,我刚刚创建了一个获取数据的方法,我想在每次需要更新 TableView 时调用。我这样做是因为我不知道 NSFetchResultsController ......现在快速浏览一下,这似乎是要走的路...... 【参考方案1】:您可以尝试处理 NSManagedObjectContextObjectsDidChangeNotification 通知。例如:
- (void)viewDidLoad
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(dataDidChange)
name:NSManagedObjectContextObjectsDidChangeNotification
object:nil];
- (void)dealloc
[[NSNotificationCenter defaultCenter] removeObserver:self
name:NSManagedObjectContextObjectsDidChangeNotification
object:nil];
- (void)dataDidChange
[self.tableView reloadData];
【讨论】:
【参考方案2】:首先,如果你不熟悉UITableView
,你应该阅读Table View Programming Guide for iOS。
如果你使用 Core Data 来填充你的 UITableView
,你几乎总是应该使用 NSFetchedResultsController
。
【讨论】:
以上是关于使用 UINavigationController 从另一个控制器更新或重新加载 UIViewController?的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationcontroller 中未使用的视图会发生啥?
使用 push segue 时 UINavigationController 是不是强制
UINavigationController - 使用 UIBlurEffect 清除背景
一起使用 UITabBarController 和 UINavigationController