我正在开发一个应用程序,允许用户向可以从各个部分中选择的人发送消息。其中一个部分恰好是存储在电话簿上的联系人(其他联系人是从在线数据库中选择的)。
因此,我有一个收件人的“主列表”。例如,如果用户选择从其在线帐户中选择联系人,则会推送新视图,该视图将允许用户选择要添加到收件人列表的联系人。当他们返回主列表时,他们应该看到在那里选择的所选参与者。如果他们要返回添加其他人,则应检查所选联系人(每个联系人都显示为UITableViewCell)。
这适用于所有在线联系人但是我在使用ABPeoplePickerNavigationViewController为本地联系人实现此功能时遇到了一些问题。要在用户返回此屏幕时检查所选联系人,我需要在加载视图时使用某种方法。
在加载表之后是否保证会调用任何视图委托(即ViewDidAppear)(我对此非常怀疑)?
如果没有,我曾想过在计时器中计算数据源中的总行数(使用numberOfRowsInSection :)。如果在没有计数递增的情况下已经过了半秒左右,那么所有记录都已加载应该是一个安全的赌注。然而,不知何故,我不确定这是否会起作用。可能是所有记录都会在一次点击中加载。
关于如何实现这一目标的任何想法?我建议的方法是否可行?是否有不同的解决方法?
答案 0 :(得分:0)
如果通过标准方法(如presentModelView:或pushViewController:)进行视图转换,则将调用有关viewWillAppear:,viewDidAppear,viewWillDisappear:和viewDidDisappear的方法。但是如果你通过UIView的实例方法进行视图转换,比如+ transitionFromView:toView:duration:options:completion等,那么你必须手动调用那些viewWillAppears方法。
所有与UI相关的方法都将在主线程中运行,而ABPeoplePickerNavigationController是UIViewController的子类。当它的视图已加载时,它将调用-viewDidLoad。此时,表示视图已加载,可能此视图未出现。因此,-viewWillAppear:应该在-viewDidLoad之后执行。但是,-viewDidLoad可能在从-init返回之前执行。在我的实验中,我在-init中设置了view的backgroundColor,然后当我使用self.view.backgroundColor = [UIColor black]时,此时视图已被加载。这意味着当我设置视图的背景颜色时,将执行-viewDidLoad。