下拉刷新

iOS中UITableViewController自带的刷新控件

喜欢而已 提交于 2019-12-10 18:09:36
iOS中UITableViewController自带的刷新控件 一、引言 在iOS开发中,使用tableView的界面,大多会用到一个下拉刷新的的控件,第三方库中,我们一般会选择比较好用的MJRefresh,其实,在iOS6之后,系统为我们提供了一个原生的刷新控件,使用起来非常方便,只是制定性不强,如果我们没有复杂的需求,使用UIRefreshControl也是不错的一个选择。 二、UITableViewController 相对于UIViewController,UITableViewController只是在内部为我们封装好了一个UITableView,并且遵守好了相关的协议,我们只需要在其中实现方法即可。UITableViewController更多的方面之处是在于下面的这个属性: @property (nonatomic) BOOL clearsSelectionOnViewWillAppear; 这是一个bool值,设置为yes后每当当前controller调用ViewWillAppare的时候,都会将cell的选中状态取消,这十分有用,我们在通过点击cell跳转界面后,pop回来不需要在手动修改cell的选中状态了。 除此之后,TableViewController中还封装了这样一个属性: @property (nonatomic, strong, nullable)

下拉刷新、上拉加载更多控件实现原理及解析(一)

笑着哭i 提交于 2019-12-09 23:03:06
以前那个账号,以后可能不用了,把文章搬过来!!! 效果预览 接受 hi大头鬼hi 的建议,来一个动态图,方便大家知道这是个什么东西。 动机 项目中,需要一个支持任意View的下拉刷新+上拉加载控件,GitHub上有很多现成的实现,如 Android-PullToRefresh , android-Ultra-Pull-To-Refresh 等,这些Library都非常优秀,但是 Android-PullToRefresh 已经不在维护了, android-Ultra-Pull-To-Refresh 本身并不支持上拉加载更多,经过一番纠结后决定自己写一个。 原理 无论是下拉刷新还是上拉加载更多,原理都是在内容View(ListView、RecyclerView...)不能下拉或者上划时响应用户的触摸事件,在顶部或者底部显示一个刷新视图,在程序刷新操作完成后再隐藏掉。 实现 既然要在头部和顶部添加刷新视图,我们的控件应该是个ViewGroup,我是直接继承FrameLayout,这个控件的名字叫 NsRefreshLayout 。然后我们需要定义一些属性,如是否自动触发上拉加载更多、刷新视图中的文字颜色等。 属性定义 <declare-styleable name="NsRefreshLayout"> <!--Loading视图背景颜色--> <attr name="load_view

下拉刷新、上拉加载更多控件实现原理及解析(二)

荒凉一梦 提交于 2019-12-09 12:50:27
之前的博客 《下拉刷新、上拉加载更多控件实现原理及解析》 中实现了一个通用的刷新控件,但是使用中发现了问题,当包含的列表中有嵌套滚动(滚动控件中还包含滚动控件)时,会出现滚动冲突。 原因分析 因为我们直接拦截了“dispatchTouchEvent”,这个回调是不能被子控件控制的,所以当子控件需要父控件让出Touch事件时(比如调用父控件的“requestDisallowInterceptTouchEvent(true)”方法),我们现在的实现是达不到的,我们需要换一个回调接口,去实现我们的功能。 寻找合适的函数 我们现在有两个需求: 1、能够拦截Touch事件; 能够拦截Touch事件的函数,除了我们前面用到的“dispatchTouchEvent”,还有就是“onInterceptTouchEvent”,这个函数是需要和“onTouchEvent”配合使用的。 “onInterceptTouchEvent”拦截触摸事件的意思,只要你在该函数中一直返回false(ViewGroup的默认实现是返回false的),后续的Touch事件会一直先给这个函数;一旦你在该函数中返回true,那该函数就再也收不到后续的Touch事件,而是传给它的“onTouchEvent”函数,“onTouchEvent”返回false表示不消耗Touch事件,返回true则消耗Touch事件。 2

Android 下拉刷新框架实现

主宰稳场 提交于 2019-12-07 14:57:22
前段时间项目中用到了下拉刷新功能,之前在网上也找到过类似的demo,但这些demo的质量参差不齐,用户体验也不好,接口设计也不行。最张没办法,终于忍不了了,自己就写了一个下拉刷新的框架,这个框架是一个通用的框架,效果和设计感觉都还不错,现在分享给各位看官。 1. 关于下拉刷新 下拉刷新这种用户交互最早由twitter创始人洛伦•布里切特(Loren Brichter)发明, 有理论认为,下拉刷新是一种适用于按照从新到旧的时间顺序排列feeds的应用 ,在这种应用场景中看完旧的内容时,用户会很自然地下拉查找更新的内容,因此下拉刷新就显得非常合理。大家可以参考这篇文章: 有趣的下拉刷新 ,下面我贴出一个有趣的下拉刷新的案例。 图一、有趣的下拉刷新案例(一) 图一、有趣的下拉刷新案例(二) 2. 实现原理 上面这些例子,外观做得再好看,他的本质上都一样,那就是一个下拉刷新控件通常由以下几部分组成: 【1】Header Header通常有下拉箭头,文字,进度条等元素,根据下拉的距离来改变它的状态,从而显示不同的样式 【2】Content 这部分是内容区域,网上有很多例子都是直接在ListView里面添加Header,但这就有局限性,因为好多情况下并不一定是用ListView来显示数据。我们把要显示内容的View放置在我们的一个容器中,如果你想实现一个用ListView显示数据的下拉刷新

Android SwipeRefreshLayout

故事扮演 提交于 2019-12-05 13:29:59
SwipeRefreshLayout字面意思就是下拉刷新的布局,继承自ViewGroup,在support v4兼容包下,但必须把你的support library的版本升级到19.1。 提到下拉刷新大家一定对ActionBarPullToRefresh比较熟悉,而如今google推出了更官方的下拉刷新组件,这无疑是对开发者来说比较好的消息。利用这个组件可以很方便的实现Google Now的刷新效果,见下图: 主要方法 setOnRefreshListener(OnRefreshListener): 为布局添加一个Listener setRefreshing(boolean): 显示或隐藏刷新进度条 isRefreshing(): 检查是否处于刷新状态 setColorScheme(): 设置进度条的颜色主题,最多能设置四种 xml布局文件 布局文件很简单,只需要在最外层加上SwipeRefreshLayout,然后他的child是可滚动的view即可,如ScrollView或者ListView。如: <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swipe_container"

Android官方下拉刷新控件 SwipeRefreshLayout

痞子三分冷 提交于 2019-12-05 13:29:45
今天在Google+上看到了SwipeRefreshLayout这个名词,遂搜索了下,发现竟然是刚刚google更新sdk新增加的一个widget,于是赶紧抢先体验学习下。 SwipeRefreshLayout SwipeRefreshLayout字面意思就是下拉刷新的布局,继承自ViewGroup,在support v4兼容包下,但必须把你的support library的版本升级到19.1。 提到下拉刷新大家一定对ActionBarPullToRefresh比较熟悉,而如今google推出了更官方的下拉刷新组件,这无疑是对开发者来说比较好的消息。利用这个组件可以很方便的实现Google Now的刷新效果,见下图: 主要方法 setOnRefreshListener(OnRefreshListener): 为布局添加一个Listener setRefreshing(boolean): 显示或隐藏刷新进度条 isRefreshing(): 检查是否处于刷新状态 setColorScheme(): 设置进度条的颜色主题,最多能设置四种 xml布局文件 布局文件很简单,只需要在最外层加上SwipeRefreshLayout,然后他的child是可滚动的view即可,如ScrollView或者ListView。如: <android.support.v4.widget

PullToRefreshListView 应用讲解

倖福魔咒の 提交于 2019-12-03 10:30:32
转载于http://blog.csdn.net/mmjiajia132/article/details/40397813 PullToRefreshListView 用法和ListView 没有什么区别 listview能用的属性 pulltorefresh也能用 我一直认为动手是最好的学习方法... 一:首先看布局文件 <?xml version= "1.0" encoding= "utf-8"?> <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" > <!-- ptr:ptrAnimationStyle= "flip" flip:翻转 rotate:旋转--> <!-- ptr:ptrShowIndicator= "true" 右上角 右下角出现箭头--> <com.handmark.pulltorefresh.library.PullToRefreshListView xmlns:ptr= "http://schemas.android.com/apk/res-auto