UITableView与UIScrollView的一些问题(持续更新)

UITableView的一些常用操作
--------------------------------------------------------------------------------------------
// 隐藏TableView中cell之间的分割线
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
// 隔行显示不同的颜色
if (indexPath.row % 2 == 1)
{
cell.backgroundColor = ......;
}
else
{
cell.backgroundColor = ......;
}
--------------------------------------------------------------------------------------------
1. 一个View中要处理几个TableView时怎么办?
使用TableView的tag值做标记,来区分不同的TableView,然后在代理函数中用tag值区分.
typedef enum {
APP_TABLE_VIEW = 0x11,
SIGN_TABLE_VIEW,
} EFlag;
UITableView *appTableView = ...;
appTableView.tag = APP_TABLE_VIEW;
UITableView *signTableView = ...;
signTableView.tag = SIGN_TABLE_VIEW;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView.tag == APP_TABLE_VIEW)
{
// 分离出appTableView
}
if (tableView.tag == SIGN_TABLE_VIEW)
{
// 分离出signTableView
}
return nil;
}
2. 如何让选中的某个cell后快速的恢复到选中前的状态(选中时的灰色动态消失)?
本人用GCD的延时程序处理,当然可以使用performSelector:withObject:afterDelay:来执行延时操作,读者可以自己试试,很麻烦,很明显,能用简单的为啥还要用复杂的呢......
#pragma mark - 延时多少毫秒
- (void)delayTime:(int64_t)microSeconds inQueue:(dispatch_queue_t)queue
block:(void (^)(dispatch_queue_t queue))block
{
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, microSeconds * USEC_PER_SEC);
dispatch_after(popTime, queue, ^(void){
block(queue);
});
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// 延时100ms后执行deselectRowAtIndexPath动画消失,注意,实在主线程中执行,别在后台线程执行
[self delayTime:100 inQueue:dispatch_get_main_queue() block:^(dispatch_queue_t queue) {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}];
}
3. 自定义的cell中如果存在着UIButton,那如何将点击事件传递出去呢?
自定义cell后,将indexPath参数传递到自定义的cell中(NSIndexPath为cell的一个retain的属性),自定义的cell申明一个协议,里面提供了一个方法
- (void)touchEventAtIndexPath:(NSIndexPath *)indexPath;
......
@property (nonatomic, assign) id<AppTableViewCellDelegate>delegate; // 将事件传递出去
......
- (void)buttonsEvent:(UIButton *)button
{
// 将点击事件传递出去
[self.delegate touchEventAtIndexPath:_indexPath];
}
当然,也可以用block实现,以后补上
4. contentOffset在动画中设定了新值并执行了动画操作,在协议方法中scrollViewDidScroll:会执行多次吗?
这是在动画中来设置contentOffset的值来达到移动UIScrollView的效果
[UIView animateWithDuration:duration animations:^{
CGPoint point = _mainScrollView.contentOffset;
point.x = 0;
_mainScrollView.contentOffset = point;
}];
这是协议自身方法移动UIScrollView后会调用的方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
......
}
经过测试,改变contentOffset的值并执行动画后,scrollViewDidScroll:仅执行一次,无论contentOffset的值改变了多少.
5. 自定义cell中能够设置自己的高度吗?如果不能设置高度,那怎么给cell中的各种视图布局?
高度是通过tableView:heightForRowAtIndexPath:方法来设置的,实际上,自定义cell的布局不受高度影响,只存在高度太低而遮盖住了要显示的内容而已.
6. 如何在指定的row上显示自定义的cell并能完整的重用呢?
如下例,在指定row为2的前提下,其步骤与正常使用是一致的,只是需要设置一个新的重用标示而已.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 2)
{
static NSString *my = @"my";
MyTableViewCell *myCell = [tableView dequeueReusableCellWithIdentifier:my];
if (myCell == nil)
{
myCell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:my];
}
return myCell;
}
else
{
static NSString *str = @"normal";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:str];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:str];
}
return cell;
}
}
7. 一个UIScrollview中包含了几个UITableView,而某个UITableView中的自定义cell中包含了一个UIScrollview,左右滑动的手势切换这几个UITableView时,当手触发在这个cell时,其UIScrollview会得到响应吗?
这个cell的UIScrollview会得到响应,与最外层的UIScrollview互不影响.
UITableView与UIScrollView的一些问题(持续更新)的更多相关文章
- iOS:开发常用GitHub开源项目(持续更新)
IOS开发常用GitHub开源项目(持续更新) 数据类 开源库 作者 简介 AFNetworking Mattt 网络请求库 ASIHTTPRequest pokeb 网络请求库 Alamofire ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- Android精品资源汇总,10个源码(持续更新)
最近一直在学习Android,在各大社区逛,总结下自己看到的一些不错的源码.希望可以给大家带来帮助. 1.Android精品源码:带动态效果的Button(按钮) 最喜欢各种效果的按钮了,没办法就是这 ...
- 神技!微信小程序(应用号)抢先入门教程(附最新案例DEMO-豆瓣电影)持续更新
微信小程序 Demo(豆瓣电影) 由于时间的关系,没有办法写一个完整的说明,后续配合一些视频资料,请持续关注 官方文档:https://mp.weixin.qq.com/debug/wxadoc/de ...
- iOS系列教程 目录 (持续更新...)
前言: 听说搞iOS的都是高富帅,身边妹子无数.咱也来玩玩.哈哈. 本篇所有内容使用的是XCode工具.Swift语言进行开发. 我现在也是学习阶段,每一篇内容都是经过自己实际编写完一遍之后,发现 ...
- ASP.NET MVC 5 系列 学习笔记 目录 (持续更新...)
前言: 记得当初培训的时候,学习的还是ASP.NET,现在回想一下,图片水印.统计人数.过滤器....HttpHandler是多么的经典! 不过后来接触到了MVC,便立马爱上了它.Model-View ...
- git常用命令(持续更新中)
git常用命令(持续更新中) 本地仓库操作git int 初始化本地仓库git add . ...
- 基于android studio的快捷开发(将持续更新)
对于Android studio作为谷歌公司的亲儿子,自然有它的好用的地方,特别是gradle方式和快捷提示方式真的很棒.下面是我在实际开发中一些比较喜欢用的快速开发快捷键,对于基本的那些就不多说了. ...
- 总结js常用函数和常用技巧(持续更新)
学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...
随机推荐
- .NETCore分布式微服务站点设计(1)-概念图
自己画了一个简略结构图,准备按照这个搭建一套微服务型的站点 利用Identityserver4+Redis+Sqlserver+Swagger+阿里云OSS+RabbitMQ+Nginx来实现,按照自 ...
- CCF CSP 201412-2 Z字形扫描
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201412-2 Z字形扫描 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫 ...
- 【51nod】1564 区间的价值
题解 这个要注意到一个长度大的区间的最大价值一定比长度小的区间的价值要大 然后我们以每个点为最小值,显然区间越长最大值越大,然后我们更新最大区间长度的取值,这个可以用单调栈求这个最小值能更新到的左右端 ...
- LoadRunner 自带订票系统flights 功能空白、1080端口被占用的解决办法
LoadRunner 自带订票系统flights 功能空白.1080端口被占用的解决办法 安装LoadRunner8.1后运行Mercury Web Tours Application,点击fligh ...
- 8-7 Unique Snowflakes UVA11572
输入一个长度为n n<=10 6 的序列A 找到一个尽量长的连续子序列 使得该序列中没有相同的元素 用滑动窗口法 时间复杂度n 好神奇 此题非常经典 map 410ms #inc ...
- Logstash 本地安装plugin
plugin的gems仓库 下载地址:仓库地址 1.安装ruby环境 yum install ruby yum install rubygems 2.下载插件包 下载插件的方式有多种 2.1 wget ...
- OneDrive 开机启动设置失效如何处理?
问题现象: 『设置里勾选了开机启动onedrive,但是重启电脑勾选就没了,重新勾选没用,一重启就没了』 win10的onedrive无法开机启动 - Microsoft Community 处理方式 ...
- idea导入或打开项目配置问题
learn项目遇到问题: 1.IntelliJ Idea编译报错:请使用 -source 7 或更高版本以启用 diamond 运算符 file - project structure或者直接快捷键: ...
- 使用Swing的JSpinner组件设置日期时间选择器
代码: //获得时间日期模型 SpinnerDateModel model = new SpinnerDateModel(); //获得JSPinner对象 JSpinner year = new J ...
- c语言程序与设计第三版-苏小红--第一轮学习笔记、难点整理
---恢复内容开始--- 1> 编程:需求分析.设计.编写程序(编码.编辑.链接.运行).调试程序 2> 指数形式:e的左边是数值部分(有效数字),不能省略,但可以表示成 .e-4:等等: ...