iOS有关横向TableView的东西

之前看到Apple store里面有横向的tableview,当然也有可能是collectionview啦。

尤其是项目中只有一条那么需要横向滑动的东西,就没有必要使用庞大的collectionview了,点缀的使用一下横向的tableview反而更方便和灵活。当然此处大部分的情况可能是在父tableview的cell中使用个横向的tableview。

下面就简单的介绍一下,基于系统原生的UITableView封装横向tableview的要点。

我封装tableview的时候主要使用了一种比较流行的方法,tableview旋转-PI/2个单位的弧度(即逆时针旋转90度),cell旋转PI/2个单位弧度(即顺时针旋转90度)。这样的最终结果就是tableview成为了横向的。封装的过程中有一个地方比较难以理解的,就是横向的tableview的point问题,因为旋转,默认的是以tableview的中心点旋转,这样就造成了旋转后“看起来”的位置或者说Frame发生了改变,所以要修复这个因为旋转造成的“Frame偏差”。此处,你可以拿着你的手机,竖着放在一张竖着的A4纸上面,手机的左上角与A4纸左上角重合,意味着point为(0,0),然后你把手机逆时针旋转90度,看看有什么结果,结果应该是,手机左面突出了A4纸一部分,上面也距离纸的顶边一定的距离。那么这个距离是多少呢,应该就是长的二分之一减去宽的二分之一,具体的代码就是这样写的ABS(self.bounds.size.width - self.bounds.size.height) / 2,就不解释为什么是这个值了,因为我不知道言语怎么表达,我也找不到合适的画图工具。自己体验一下就能体会到。

所以此时的横向tableview向右向上都偏移  ABS(self.bounds.size.width - self.bounds.size.height) / 2  这个距离就好了。

剩下的就是封装的时候,实现UITableView的回调了,UITableView的必须实现的回调就必须实现了,然后非必需的也可以二次封装,此时还可以给一个默认的的值,以便不实现改回调时该轮子能给出默认的值,如下面的这个样子:

1 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
2     if ([self.delegate_Y respondsToSelector:@selector(h_tableView:heightForRowAtIndexPath:)]) {
3         return [self.delegate_Y h_tableView:self heightForRowAtIndexPath:indexPath];
4     }
5     return 100;
6 }

必须实现的回调也贴出来一下吧:

 1 #pragma mark - UITableViewDataSource
 2 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 3     if ([self.dataSource_Y respondsToSelector:@selector(h_tableView:numberOfRowsInSection:)]) {
 4         return [self.dataSource_Y h_tableView:self numberOfRowsInSection:section];
 5     }
 6     return 0;
 7 }
 8
 9 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
10     if ([self.dataSource_Y respondsToSelector:@selector(h_tableView:cellForRowAtIndexPath:)]) {
11         return [self.dataSource_Y h_tableView:self cellForRowAtIndexPath:indexPath];
12     }
13     return nil;
14 }

不用仔细看代码也没问题,最后我会贴出coding的链接,可以去下载源码看看

因为UITableView的回调,太多了,我就封装了几个,如果你需要更多的,可以另行的仿照实现。

说了这么多,再说说这个轮子的弱点吧,因为在使用xib或者storyboard拖约束布局的时候会产生问题,所以代码中,默认的注释掉了- (instancetype)initWithCoder:(NSCoder *)coder。推荐直接代码写frame。

因为cell已经被旋转,所以直接正常的frame的布局就可以了。

代码:https://coding.net/u/ysk/p/HorizontalTableView/git

就写到这吧,有什么不妥或者感觉我写的有什么不对的地方,欢迎指正啊。

时间: 2024-08-05 14:12:00

iOS有关横向TableView的东西的相关文章

IOS开发系列--TableView、多个TableViewCell、自定义Cell、Cell上画画(故事板+代码方式),ios7tableview索引

在此之前,我们已经创建了一个通过简单的表视图应用程序并显示预定义的图像.在本教程中,我们将继续努力,使应用程序变得更好,: >不同的行显示不同的图像 - 上个教程,我们的所有行显示相同的缩略图.那么不同的食物显示不同的图片不是更好么? >自定义视图单元-我们将展示我们自己的视图来替代默认表单元格样式 显示不同缩略图 在我们更改代码之前,让我们回顾显示缩略图的代码. 最后,我们增加了一个行代码指示UITableView每一行显示"creme_brelee.jpg"这张图片.显

IOS开发之TableView、多个TableViewCell、自定义Cell、Cell上画画(故事板+代码方式)

最近要做一个项目,有个账户设置界面,看了微博.微信.QQ,他们的账号设置都比较原生态没做什么处理.春雨医生的账号不错,做了许多处理.不说废话直接上代码. 第一步: //UserTableViewCell.h这里定义第一种Cell #import <UIKit/UIKit.h> @interface UserTableViewCell : UITableViewCell @property (weak, nonatomic) IBOutlet UIImageView *userviewcelli

iOS中绑定tableview后,变量值消失的问题

好吧,标题就以最通俗的语句命名,估计百度收录的时候,大家查找的时候会更加的方便. iOS新手,这个问题着实调试了好长时间! 由于上手就开始做大的项目,也没时间从基础做起,相信大多数小公司的开发者都是这种模式.因此很多问题都产生自很基础的错误. 项目使用mvc结构,在异步读取完数据后,NSArray中model的数据就丢失了,专业点就是内存释放了,只剩下内存地址了. 可能大家的情况和我不同,所以解决方法也不一定相同. 项目服务端是asp.net webservice,使用AFNetworking读

iOS 两个tableview的 瀑布流

iOS 两个tableview的 瀑布流1. [代码]Objective-C     ////  DocViewController.m//  getrightbutton////  Created by 隋文涛 on 12-12-9.//  Copyright (c) 2012年 隋文涛. All rights reserved.// #import "DocViewController.h"#define heightofimage(image) image.size.height

iOS 为自定义tableView添加button点击事件后获取其序号

在自定义tableView中,为cell添加button点击事件后,如何获取其对应的序号? 1.创建tableView: 先创建一个成员变量: @interface MyCameraViewController ()<UITableViewDelegate,UITableViewDataSource> { UITableView *_tableView; }@end 在viewDidLoad中初始化 _tableView = [[UITableView alloc] initWithFrame

IOS要用到的东西

code4app.com 这网站不错,收集各种 iOS App 开发可以用到的代码示例 cocoacontrols.com/ 英文版本的lib收集 objclibs.com/ 精品lib的收集网站 http://www.ityran.com/forum-61-1.html 泰然代码仓库 ---------------------- emoji ---------------------- http://www.easyapns.com/category/just-for-fun http://w

IOS开发中tableView显示列表内容数据(storyboard版)

这是第一次写博客这类东西,且同为菜鸟级自学IOS,若有哪些不正确的希望您指正,谢谢... 先写一个大家自学时都会用到的东西——列表展示,或许您不认为这是问题,那是因为您聪慧,刚学时倒是困扰到我了,特意写一下: 第一步:创建工程IOS-->single view application      ——> Product Name:tableViewDemo                    Language:Objective—C                    Devices:iPh

iOS iPhone SDK 包含哪些东西?

iPhone SDK 包含哪些东西? 第一部分: 在使用Intel芯片的Macintosh计算机开发iOS应用程序所需的全部接口.工具以及资源全都包含于iPhone SDK. 苹果公司将大部分系统接口发布在框架这种特殊的数据包.一个框架就是一个目录,它包含一个动态共享库以及使用这个库所需的资源(例如头文件.图像以 及帮助应用程序等).如果要使用某个框架,则需要将其链接到应用程序工程,这一点和使用其他共享库相似.另外,您还需要告知开发工具何处可以找到框架头文 件以及其他资源. 除了使用框架,苹果公

iOS UIKit:TableView之单元格配置(2)

Table View是UITableView类的实例对象,其是使用节(section)来描述信息的一种滚动列表.但与普通的表格不同,tableView只有一行,且只能在垂直方向进行滚动.tableView由多个section组成,而section又由行(row)组成,也可将行称为单元格(cell).Cell是UITableViewCell类的实例对象. 1 UITableViewCell Table View使用UITableViewCell对象来绘制可视化的row,从而用户看到的table v