这次打算单独将 tableView 在 RxSwift 框架中的使用整理成一篇文章。...tableView 在日常开发中是接触到最多的UI控件之一,在 RxSwift 框架中也帮我们封装好了关于 tableview 的使用方法。...自从接触了 RxSwift 的框架,关于 tableview 基本就不用再繁琐地去实现系统提供的各种代理方法,几行代码搞定关于 tableview 的一切。...TableView 基本应用 首先,为了更好地展示 RxSwift 在 TableView 方面的优势,创建一套本地数据用于 TableView 数据源。...回看一下关于 RxSwift 框架对于 tableView 的封装,只需要几十行代码就可以完全配置出 tableView。
前言 之前的几篇博客算是入门篇,那么这篇就是RxSwift的实战篇。由于对RxSwift的认识还不够深刻,所以项目中没有使用MVVM模型,以及编程思想也还没转变过来。...整体框架 首页搭建 1、导航栏的设置 先来看看效果图: ? 首页导航栏效果演示.gif 刚开始导航栏的颜色是透明的,随着tableView向上滚动时,导航栏主键显示颜色。...设置代码如下: 获取导航栏的背景图,用于滚动时修改颜色和透明图 设置barTintColor为蓝色 设置barTintColor为白色 barImg = (navigationController?....navigationBar.isTranslucent = false 样式设置完后,开始监听tableview的滚动 tableView.rx .contentOffset...其实我也这么觉得,初入RxSwift,不打算封装太多层,怕把自己绕进去了,所以就先这样写了~ 4、设置导航栏的titile日期 效果说明:随着列表的滚动,sectionHeader的日期会显示在导航栏上
在swift环境下,RAC的孪生兄弟RxSwift同样提供了相同的框架使用,并且基于swift语言的优点,RxSwift甚至能够更简洁地开发业务代码。关于RxSwift的优点,大把大把的人在夸。...这里往往需要遵循TableView相关的各种代理方法,下面是使用结构体生成一串简单的数组并放入tableView中显示内容。...tableView在swift环境下的实现 遵循的tableView代理方法还是一如既往的繁多 接下来,在使用RxSwift框架下改造上面的tableView,来感受下RxSwift的强大。...在RxSwift中,不再需要去挨个遵循tableView的各种代理方法,直接上修改后的代码 class ViewController: UIViewController { lazy...框架实现的tableView,与原生实现的代码差异 不再需要声明遵循tableView的DataSource与delegate代理以及实现所有代理方法,Rx将其代理方法进行了封装。
,而恰巧RxSwift已经出来有一些时间了,语法也基本上稳定,遂只身前来试探试探这RxSwift,接着就做了个小Demo,有兴趣的同学可以瞧一瞧~ Exhibition 结构 . ├── Controller...Moya/RxSwift // 为RxSwift专用提供,对Alamofire进行封装的一个网络请求库 ObjectMapper // Json转模型之必备良品 RxDataSources...接下来我们来说下Moya的使用 一、创建一个枚举,用来存放请求类型,这里我顺便设置相应的路径,等下统一取出来直接赋值即可 enum LXFNetworkTool { enum LXFNetworkCategory...好吧,我们接下来说说如何优雅的来实现tableView的数据源。其实RxDataSources官网上已经有很明确的使用说明,不过我还是总结一下整个过程吧。...设置刷新控件,并且在创建刷新控件的回调中使用output的requestCommond发射信号 tableView.mj_header = MJRefreshNormalHeader(refreshingBlock
RxSwift使用备忘 RxSwift 常用方法使用,这里记录一下。...) .subscribe { [unowned self] (query) in }.disposed(by: disposeBag) } RxSwift...tableView.mj_header?.endRefreshing() if isLastPage { self?....tableView.mj_footer?....endRefreshing() } }) .disposed(by: disposeBag) } RxSwift 实现通知 override
二、UITableViewDataSourc(数据源代理) 1、必须实现的回调方法 返回每个分区的行数 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection...:(NSInteger)section; 返回每一行的cell - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection...; 设置某行是否可以被移动 - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath...)tableView; 设置索引栏标题对应的分区 - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle...didDeselectRowAtIndexPath:(NSIndexPath *)indexPath; 设置tableView被编辑时的状态风格,如果不设置,默认都是删除风格 - (UITableViewCellEditingStyle
通过self.title属性来设置导航栏的标题。...在iPhone的设置界面,就是用不同的section把界面分开,像通知中心,控制中心,个人隐私,每个table view都有header和footer,header是在cell上面,footer在cell...override func tableView ( tableView: UITableView, numberOfRowsInSection section: Int ) -> Int { //Return...这个协议包括组的数量,美组中行的数量,以及cell如何展现。...第二个方法是tableView(_:numberOfRowsInSection:),这个方法决定了某个组里具体有多少行,当然这里也不能为0: override func tableView(tableView
下面我用Java的方法模拟一下: 抽象主题类:接口方法(视图只用这些方法就够了) 真实主题类:视图控制器(具体实现的方法,比如设置各种视图需要的参数等,设置完扔给代理类处理) 代理类:视图控件...简单介绍一个UITableView是一个表视图控件,设置组数和行数,在iOS中比较常用。...numberOfRowsInSection(int section) { return delegate.numberOfRowsInSection(section); }...numberOfRowsInSection:(NSInteger)section; - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView...tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return 2; } 总结一下这部分,
,设置当前代理=self UITableView *tableView = [[UITableView alloc]init]; tableView.frame = Frame(0, DefaultNaviHeight...应该算最常见的控件之一,基本上大多数界面都会用它展示数据,所以tableView也抽到基类中,当公告属性 有tableView 就跑不了数据源了,datas 同理,也抽到基类 同时,设置MNBaseViewController...**/ @implementation MNBaseControllerTypeNoSection - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection...{ return self.datas.count; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection...:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section、-(NSInteger)numberOfSectionsInTableView
本文是基于 iOS - RxSwift 项目实战记录 所述,如果你还未阅读过,建议你最好还先阅读一遍,并下载Demo熟悉一下 : ) LXFBiliBili 前言 MVVM的模式中,多出了ViewModel...结合RxSwift架构,我们一般就会在ViewModel中定义一个input收集繁杂操作所需的信息,通过一个transform方法将input作为参数传入,进而得到一个output供controller...在使用RxSwift开发时会大量的使用到这种形式,其中就包括我们的网络请求。...结合 iOS - RxSwift 项目实战记录 中所述的“MJRefresh在RxSwift中的使用”,在output中定义了一个变量 let refreshStatus = Variable<LXFRefreshStatus...tableView.mj_footer.endRefreshing() case .noMoreData: self?.
,也有使用Searh Bar Search Display Controller的控件的,本文就简单的使用Search Bar和UITableView实现搜索Demo的,最上面的就是搜索栏,之前的就是TableView...{ [self.dataList addObject:[NSString stringWithFormat:@"%ld-FlyElephant",(long)i]]; } 设置区域...: //设置区域-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1;} 设置区域的行数...(重点),这个就是使用委托之后需要需要判断是一下是否是需要使用Search之后的视图: -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection...,也就是UISearchController的active属性: //设置区域的行数-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection
RxSwift 这个框架看我就够了,这一篇我重点介绍高阶函数,掌握好RxSwift的高阶函数,是你通往成功的捷径。...搞RxSwift,我是认真的 RxSwift 宝图镇博,咔咔点赞~~~~ Rxswift RxSwift 深入浅出(一)RxSwift初探 RxSwift 深入浅出(二)高阶函数 RxSwift 深入浅出...(三)Subject RxSwift 深入浅出(四)控件应用 RxSwift 深入浅出(五)tableView应用 RxSwift 深入浅出(六)RxDataSources RxSwift 深入浅出(七...)网络封装 RxSwift 深入浅出(八)开发总结 上面是经常使用的高阶函数,其实和swift的高阶函数是非常类似的,下面再讲几个有意思的高阶函数
前言 以前对MVVM的理解和运用觉得很浅薄,在项目中用处只是对ViewController减负 没有做数据与View的绑定,没有做到真正的数据驱动视图 没有体现出MVVM易于测试的好处 对于RxSwift...RxSwift有一定的了解和使用。...的方法,这时候我们只要把ViewModel的数据输出序列绑定到TableView的数据源序列就可以了。...dataSource:TableView数据源序列,发生改变会去刷新TableView。...,对RxSwift要有一定的了解。
这个页面肯定是需要一个UITableView的,在tableview的代理方法中要实现分区的一个方法,即要返回tableview的分区数。返回的分区数就是好友的分类数。...tableview中各个分区的行数就是各个好友分类中的好友数。显示各个好友分类的视图是各个分区的一个头视图。头视图会有一个点击事件,用于好友分类的展开和收起。...- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 方法的实现很关键,1...代码: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ GroupModel...每次点击各个分区的头视图的时候需要完成两件事:1.改变各个模型中的点击的状态属性 2.更新tableview的点击的分区。
关于 ZHTableViewGroup 的设计之路 关于ZHTableViewGroup思想如何产生 之前复杂的页面不用表格要对于小屏幕做适配添加滚动 需要可以滚动的试图无非就是 UIScrollView...: UITableView) -> Int //返回组的个数 这个代理方法是设置表格的分组个数 我们用 ZHTableViewGroup 分别代表表格的组 对于用户首先要创建一个ZHTableViewGroup...: 表格对象 public init(tableView:UITableView) { self.tableView = tableView super.init...(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int // 返回每组 cell 的总数 我们创建一个类方法返回 cell...ZHTableViewDataSource数据源对象可以为 nil /// - section: 组的索引 /// - Returns: cell的总数 public class func numberOfRowsInSection
关于标题 言归正传啊,今天还是想跟大家聊一聊 RxSwift ,之前我写过一篇 走进 RxSwift 之观察者模式,讲解了 RxSwift 的部分实现。...RxSwift 认为不管是 Cold 还是 Hot,它们都是 Observable,它们同属于一个抽象,而不是两种独立的类型。...实战小剧场 下面我随便举个例子,我们要完成的功能是发送网络请求,将返回的数据显示到一个 TableView 上。...于是你在bindDataSource开头加了一句tableView.dataSource = nil,再次 cmd + R。Everything goes well!...如何一眼区别 CO 和 HO 前面也说过了,不管是冷是热,它们都是 Observable,虽然我顺便提了几个 RxSwift 中典型的 CO 和 HO,但如果是一个自定义的 Observable 呢,要如何区分它是冷是热呢
首先看如何制造回调地狱: func fetchData(_ f: (String) -> Void) -> Void { f("1") } fetchData { (result) in...print(result) } 复制代码 那么可以总结出回调地狱的规则为: (T -> ()) -> () 如何避免回调地狱:单子的模型(简) struct Monad { var value...+ 5) // 10.0 + 5 }) result.value // 15 复制代码 所以单子模型的关键函数flatMap可以抽象成: (T -> F(U)) -> F(U) 最后用RxSwift
myTableView.delegate = self myTableView.dataSource = self self.view.addSubview(myTableView) 设置了...(tableView: UITableView, numberOfRowsInSection section: Int) -> Int // Row display....复制粘贴这两个available的方法并实现它: func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -...> Int { return 10; } func tableView(tableView: UITableView, cellForRowAtIndexPath...} 当然,别的方法也是一样,如点击单元格: func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath
allNames.count } // 每个分区的行数 func tableView(_ tableView: UITableView, numberOfRowsInSection section...[indexPath.row] print("str\(str)") } // 设置单元格的编辑的样式 func tableView(_ tableView: UITableView, editingStyleForRowAt...UITableViewCellEditingStyle.insert } else { return UITableViewCellEditingStyle.delete } } // 设置确认删除按钮的文字...: UITableView, numberOfRowsInSection section: Int) -> Int { var count = allNames[section]!....[indexPath.row] print("str\(str)") } // 设置单元格的编辑的样式 func tableView(_ tableView: UITableView, editingStyleForRowAt
课题一:如何计算Cell高度 方案一:直接法(面向对象) 想知道妹纸爱你有多深?直接去问妹纸本人吧! 嗯!Cell也是一样的,想知道cell到底有多高?直接问Cell本人就好了。...:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.testTitleArray.count...*)tableView numberOfRowsInSection:(NSInteger)section { return self.testTitleArray.count;...View设置约束 - 除了要定高、定宽、左上角粘着Label外,还要设置bottom距contentView的bottom间距为固定值,如0 第三步:一定要注意 - 不能实现heightForRow代理方法...但是,在CellForRow中拿到Cell高度后,如何传递给heightForRow代理方法呢?
领取专属 10元无门槛券
手把手带您无忧上云