dug*_*gla 160 uiviewcontroller viewdidload viewwillappear ios
我一直对应分配给的任务类型有点不清楚viewDidLoad对比viewWillAppear:在一个UIViewController子类.
例如,我正在做一个应用程序,我有一个UIViewController子类命中服务器,获取数据,将其提供给视图,然后显示该视图.什么是这样做的利弊viewDidLoad对比viewWillAppear?
小智 249
viewDidLoad是你必须做的事情.每次出现视图时都会调用viewWillAppear.您应该在viewDidLoad中执行一次只需要执行的操作 - 例如设置UILabel文本.但是,您可能希望每次用户查看时修改视图的特定部分,例如,每次进入"正在播放"视图时,iPod应用程序都会将歌词滚动回到顶部.
但是,当您从服务器加载东西时,您还必须考虑延迟.如果将所有网络通信打包到viewDidLoad或viewWillAppear中,它们将在用户看到视图之前执行 - 可能导致应用程序的短暂冻结.首先向用户显示具有某种活动指示符的未填充视图可能是个好主意.当您完成网络时,可能需要一两秒钟(或者甚至可能会失败 - 谁知道?),您可以使用您的数据填充视图.在各种Twitter客户端中可以看到关于如何做到这一点的好例子.例如,当您在Twitterrific中查看作者详细信息页面时,视图仅显示"正在加载...",直到网络查询完成.
小智 12
最初只使用带有tableView的ViewDidLoad.在测试失去Wifi时,通过将设备设置为飞行模式,意识到表没有刷新Wifi的返回.事实上,即使在-Info.plist中将后台模式设置为YES的主页按钮,似乎也无法在设备上刷新tableView.
我的解决方案
-(void) viewWillAppear: (BOOL) animated { [self.tableView reloadData];}
Run Code Online (Sandbox Code Playgroud)
取决于,每次打开视图时都需要加载数据吗?还是只有一次?
viewDidLoad: 无论您有什么处理,都需要完成一次。
viewWilLAppear:每次加载页面时需要更改的任何处理。
标签、图标、按钮标题或大多数 dataInputedByDeveloper通常不会改变。名称、照片、链接、按钮状态、列表(tableViews 或 collectionView 的输入数组)或大多数 dataInputedByUser通常会更改。
| 归档时间: |
|
| 查看次数: |
98662 次 |
| 最近记录: |