数据加载后刷新UI界面
来源:互联网 发布:中国家具出口数据 编辑:程序博客网 时间:2024/05/17 03:22
对于IOS初学者来说,UI界面的交互有时候会让你不知所措,在开发中,一般的设计思路是:1.先搭建好UI界面,需要网络数据的控件先不显示或者让它处于等待显示状态;2.开始加载网络数据,数据加载完毕后,重新刷新UI界面或者将控件赋值后,让他们从等待显示状态变为显示状态.
这两种方法各有利弊,第一种方法,是将UI界面(除网络数据部分外)先显示出来,让用户有一种界面的直观概念,不需要等待,但是如果网络状态不佳,数据会在UI界面显示后在出现在的相应的位置上,给人一种不流畅的感觉.第二种方法会让数据全部加载完成后显示数据,无需进行二次刷新,一撮而就,但是同样在网络状态不佳的情况下,用户可能连UI界面的外观结构都见不到,一直处于"小菊花"状态.
我个人推荐第一种方法,因为用户处于等待"小菊花"状态时,你的app印象分已经定格了,第一种方式,至少能迅速展现界面,给人的流畅度比较高.下面我就以一个例子来说明下第一种刷新UI界面的方式的使用方法,优点在于简单,易用.
先展示下效果界面:
简单的介绍下这个界面,整个界面是一个scrollView,它有两部分组成,上面灰色字体为一块,下面黑色字体为一块,这两个视图,我都是写在了自定义View里,分别是ServiceDetailTopView和ServiceDetailBottomView,除了前面的标题外,内容来自后台数据.
1.定义全局变量:
@interface ServiceDetailViewController ()<UIScrollViewDelegate>@property(nonatomic,strong)ServiceDetailTopView *topView;@property(nonatomic,strong)ServiceDetailBottomView *bottomView;@end
-(void)createUI{ UIScrollView *scrollView =[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT-64)]; scrollView.pagingEnabled = NO; scrollView.showsHorizontalScrollIndicator = NO; scrollView.showsVerticalScrollIndicator = NO; scrollView.delegate = self; [scrollView setContentOffset:CGPointMake(0, 0) animated:NO]; ServiceDetailTopView *topView =[[ServiceDetailTopView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 155) withTiltles:@[@"业主:",@"网点:",@"地址:",@"业务:"]]; [scrollView addSubview:topView]; self.topView =topView; ServiceDetailBottomView *bottomView =[[ServiceDetailBottomView alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(topView.frame), SCREEN_WIDTH, 520)]; [scrollView addSubview:bottomView]; self.bottomView =bottomView; scrollView.contentSize =CGSizeMake(SCREEN_WIDTH, topView.frame.size.height+bottomView.frame.size.height); [self.view addSubview:scrollView]; }
具体两个自定义视图的布局就不展示了.此时我们获取了没有加载数据的UI界面.
3.数据加载 获取你存储数据模型model:
self.topView.model =serViceDetailModel; self.bottomView.model =serViceDetailModel;
这是ServiceDetailTopView.h的接口方法:
#import <UIKit/UIKit.h>@class LBListDataModel;@interface ServiceDetailTopView : UIView-(instancetype)initWithFrame:(CGRect)frame withTiltles:(NSArray *)titleArr;@property(nonatomic,strong)LBListDataModel *model;@end
这是ServiceDetailBottomView的接口方法
@class LBListDataModel;@interface ServiceDetailBottomView : UIView@property(nonatomic,strong)LBListDataModel *model;@end
4.刷新UI界面:
这一步是精髓所在,其实也是最简单的部分,就是对model的get方法.在两个自定义视图.m文件中对控件进行重新赋值
-(void)setModel:(LBListDataModel *)model{ _model =model; self.label.text =_model.column_1}以此类推,对所有label控件,用模型赋值.
这样就完成了控件的重新赋值,也就是刷新效果.
scrollView
- 数据加载后刷新UI界面
- 线程加载数据后的ui线程刷新实现
- 网络请求后关于刷新界面UI的问题
- android java开发 第四天 之(后台服务处理完业务数据后,传送给ui Activity并刷新界面)
- 编辑界面重新加载数据,刷新列表界面
- 刷新Ui界面
- 刷新Ui界面
- python3多线程更新UI数据,pyqt5界面刷新
- FragmentTabHost切换不重新加载UI。(不刷新数据)
- listview自定义adapter数据改变后刷新界面
- UI界面加载
- Android listview加载数据后没有立即刷新的解决办法
- UI 一一 数据刷新
- 使用原生自定义View,setState刷新界面后UI不能正常显示
- angularjs ui-view加载刷新
- 【Android】UI界面外的线程,控制刷新UI界面
- qt ui加载界面问题
- rerecyclerview刷新加载数据
- linux常用命令
- Cocos骨骼动画
- mac端如何快速搭建一个web服务器
- 码农小汪-Hibernate学习4-关联关系映射many-to-one,many-to-one,one-to-many
- 前台页面总结
- 数据加载后刷新UI界面
- 新弹出框UIAlert 的简单用法
- matlab基于遗传算法的最大熵值法的双阈值图像分割
- Java多线程中Sleep与Wait的区别
- LeetCode 36 Valid Sudoku My Submissions Question
- 整理request ,response ,会话session ,全局application
- Leetcode Remove Duplicates from Sorted Array I and II
- 大括弧之战 代码风格
- 工作中的"注册"流程以及代码备份