如果用tableviewcontroller 下拉刷新会自带,而且tableview 会自动适应屏幕。这样做的话这个界面的内容就要完全用cell承载了。
tableview pullRefresh 主要就是需要需要做下拉加载更多,这种需求,本人曾用两种的办法解决。题外话(如果不一定要上拉加载更多,可在构造最后一个cell后,多构造一个cell(button -》 加载更多))
1)在getcell 方法中判断如果 cell 为当前数据的最后一个。那么就去请求更多的数据。这样做的话只要构造最后一个cell的时候就会去加载数据,有一点不好控制用户是否真的想去请求数据。该方法实现简单,本文不展示代码。
2)在scroll中判断,如果用户上拉的距离达到一定高度是,则表明用户需要请求数据。
如下代码主要继承 talbesource ,来实现。其中用到两个xib ,分别是 上拉刷新,和下拉加载更多的 样式xib。
public class PLTableViewSource :UITableViewSource { UITableView tableview; public UIView headerView; public UIView footerView; RectangleF headerviewFrame; //bool isDragging; public bool isRefreshing; public bool isLoadingMore; public bool isCanLoadMore = true; public bool pullRefreshEnable=true; public bool clearSelectionOnViewWillApper; public const float DEFAULT_HEIGHT_OFFSET = 52f; public PLTableViewSource (UITableView p_tb) { this.tableview = p_tb; //set headerview var temp_views= NSBundle.MainBundle.LoadNib ("PLHeaderXib", this, null); this.headerView = MonoTouch.ObjCRuntime.Runtime.GetNSObject(temp_views.ValueAt (0)) as UIView; SetHeaderView (this.headerView); //set footerview temp_views= NSBundle.MainBundle.LoadNib ("PLFooterXib", this, null); this.footerView = MonoTouch.ObjCRuntime.Runtime.GetNSObject(temp_views.ValueAt (0)) as UIView; SetFooterView (this.footerView); //SetFooterViewVisibility (true); } #region Set Header View public void SetHeaderView(UIView hView) { if (tableview==null) { return; } if (null!=headerView&&headerView.IsDescendantOfView(tableview)) { headerView.RemoveFromSuperview (); } headerView.DangerousRelease (); headerView = null; if (hView!=null) { headerView = (UIView)hView.DangerousRetain(); RectangleF f=headerView.Frame; headerviewFrame= headerView.Frame = new RectangleF (f.Location.X, 0 - f.Size.Height, f.Size.Width, f.Size.Height); tableview.AddSubview (headerView); } } public virtual float HeaderRefreshHeight() { if (headerviewFrame!=RectangleF.Empty) { return headerviewFrame.Size.Height; } return DEFAULT_HEIGHT_OFFSET; } protected virtual void PinHeaderView() { UIView.Animate (0.2, () => { this.tableview.ContentInset = new UIEdgeInsets(this.HeaderRefreshHeight(),0,0,0); }); ((PLHeaderXib)this.headerView).SetActivityAndMsg(string.Empty,true); } protected virtual void UnPinHeaderView(){ UIView.Animate (0.2, () => { this.tableview.ContentInset = UIEdgeInsets.Zero; }); ((PLHeaderXib)this.headerView).SetActivityAndMsg(string.Empty,false); } private void WillBeginRefresh() { if (pullRefreshEnable) { PinHeaderView (); } } private void WillShowHeaderView(UIScrollView scrollview) { } private void HeaderViewDidScroll(bool willRefreshonRelease,UIScrollView scrollview) { } public virtual bool ReFresh() { if (isRefreshing) { return false; } this.WillBeginRefresh (); isRefreshing = true; return true; } public virtual void RefreshCompleted() { isRefreshing = false; if (pullRefreshEnable) { this.UnPinHeaderView (); } } #endregion #region Set Footer View private void SetFooterView(UIView fview) { if (null==tableview) { return; } tableview.TableFooterView = null; footerView.DangerousRelease (); footerView = null; if (null!=fview) { footerView = (UIView)fview.DangerousRetain(); tableview.TableFooterView = footerView; } } private void WillBeginLoadingMore(){} public virtual void LoadMoreCompleted() { isLoadingMore = false; SetFooterViewVisibility(false); } public virtual bool LoadMore() { if (isLoadingMore) return false; this.WillBeginLoadingMore(); isLoadingMore = true; SetFooterViewVisibility(true); return true; } public float FooterLoadMoreHeight() { if (null!=footerView) { return footerView.Frame.Size.Height; } return DEFAULT_HEIGHT_OFFSET; } public void SetFooterViewVisibility(bool visible) { if (visible&&this.tableview.TableFooterView!=footerView) { this.tableview.TableFooterView = footerView; }else if (!visible) { this.tableview.TableFooterView = null; } } #endregion #region all load completed public void AllLoadingCompleted() { if (isRefreshing) { this.RefreshCompleted (); } if (isLoadingMore) { this.LoadMoreCompleted (); } } #endregion #region tableview Source public override int RowsInSection (UITableView tableview, int section){return 0;} public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath){return null;} #endregion #region scrollview delegate public override void WillEndDragging (UIScrollView scrollView, PointF velocity, ref PointF targetContentOffset) { if (isRefreshing||isLoadingMore) { return; } if (scrollView.ContentOffset.Y<=0-HeaderRefreshHeight()) { if (pullRefreshEnable) { ReFresh (); } }else if (scrollView.ContentSize.Height - scrollView.Frame.Size.Height - scrollView.ContentOffset.Y<FooterLoadMoreHeight()) { if (isCanLoadMore) { LoadMore (); } } } #endregion转载于:https://www.cnblogs.com/mendeliang/p/5070847.html
相关资源:listView下拉刷新,到底部自动加载更多