- 浏览: 405179 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
sucheng2016:
请问需要引入哪些个jar呢?
利用CXF发布restful WebService的注意事项(服务器端) -
sucheng2016:
利用CXF发布restful WebService的注意事项(服务器端) -
Joyceitoyo:
我试了怎么不好使,着急找中, 希望给与帮助 22192214 ...
UIWebView自适应宽度 -
Alanoddsoff:
https://10.24.16.26:7002 这个地址访问 ...
unable to find valid certification path to requested target 的简单解决办法 -
meiyounini:
求源码分享。。。
利用CXF发布restful WebService的注意事项(客户端)
由于工作需要,写了一个UITableView的子类,简单的实现了每个cell的展开和收缩的动画效果以及展开和收缩后的cell样式变化。这个效果也许你现在用不到,但是它在iOS上的效果确实很不错,也许以后你就会用到。分享给大家。给大家一个实际的效果:
ExtensibleTableView.h
ExtensibleTableView.m
将这2个文件放到proj之后,要设置delegate_extend并且实现
//返回展开之后的cell
- (UITableViewCell *)tableView:(UITableView *)tableView extendedCellForRowAtIndexPath:(NSIndexPath *)indexPath;
//返回展开之后的cell的高度
- (CGFloat)tableView:(UITableView *)tableView extendedHeightForRowAtIndexPath:(NSIndexPath *)indexPath;
2个方法。
还有一点不合理的地方,我试着去解决,但是最终未果=。=!
这里要先判断当前行是否被选中,若被选中则调用extendedCellForRowAtIndexPath方法。因为我试着重写UITableView的- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath方法。试图在这个方法里做上边的事情,可是这个方法总是在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法之前被调用,因此没有达到预期的目标。
希望各位如果下载了源码,解决了这个问题的话,可以回到这里给我留言或者联系qq82934162.
以下是一个简单的demo源码:
http://dl.iteye.com/topics/download/4f242bbb-8004-3352-9604-b1211b7562df
sorry,我写错了,我想写的是在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath之后。因此无法让被展开的cell直接在- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath是返回。。
谢谢哈
ExtensibleTableView.h
// // ExtensibleTableView.h // Wow // // Created by Boris Sun on 12-6-20. // Copyright (c) 2012年 adsit. All rights reserved. // #import <UIKit/UIKit.h> @protocol ExtensibleTableViewDelegate <NSObject> @required //返回展开之后的cell - (UITableViewCell *)tableView:(UITableView *)tableView extendedCellForRowAtIndexPath:(NSIndexPath *)indexPath; //返回展开之后的cell的高度 - (CGFloat)tableView:(UITableView *)tableView extendedHeightForRowAtIndexPath:(NSIndexPath *)indexPath; @end @interface ExtensibleTableView : UITableView { //当前被展开的索引 NSIndexPath *currentIndexPath; id<ExtensibleTableViewDelegate> delegate_extend; } @property(nonatomic,retain)id delegate_extend; @property(nonatomic,retain)NSIndexPath *currentIndexPath; //将indexPath对应的row展开 - (void)extendCellAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated goToTop:(BOOL)goToTop; //将展开的cell收起 - (void)shrinkCellWithAnimated:(BOOL)animated; //查看传来的索引和当前被选中索引是否相同 - (BOOL)isEqualToSelectedIndexPath:(NSIndexPath *)indexPath; @end
ExtensibleTableView.m
// // ExtensibleTableView.m // Wow // // Created by Boris Sun on 12-6-20. // Copyright (c) 2012年 adsit. All rights reserved. // #import "ExtensibleTableView.h" @implementation ExtensibleTableView @synthesize delegate_extend; @synthesize currentIndexPath; - (id)init { currentIndexPath = nil; return [super init]; } //重写设置代理的方法,使为UITableView设置代理时,将子类的delegate_extend同样设置 - (void)setDelegate:(id<UITableViewDelegate>)delegate { self.delegate_extend = delegate; [super setDelegate:delegate]; } /* 将indexPath对应的row展开 params: animated:是否要动画效果 goToTop:展开后是否让到被展开的cell滚动到顶部 */ - (void)extendCellAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated goToTop:(BOOL)goToTop { NSLog(@"debug 2"); //被取消选中的行的索引 NSIndexPath *unselectedIndex = [NSIndexPath indexPathForRow:[currentIndexPath row] inSection:[currentIndexPath section]]; //要刷新的index的集合 NSMutableArray *array1 = [[NSMutableArray alloc]init]; //若当前index不为空 if(currentIndexPath) { //被取消选中的行的索引 [array1 addObject:unselectedIndex]; } //若当前选中的行和入参的选中行不相同,说明用户点击的不是已经展开的cell if(![self isEqualToSelectedIndexPath:indexPath]) { //被选中的行的索引 [array1 addObject:indexPath]; } //将当前被选中的索引重新赋值 currentIndexPath = indexPath; if(animated) { [self reloadRowsAtIndexPaths:array1 withRowAnimation:UITableViewRowAnimationFade]; } else { [self reloadRowsAtIndexPaths:array1 withRowAnimation:UITableViewRowAnimationNone]; } if(goToTop) { //tableview滚动到新选中的行的高度 [self scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; } } //将展开的cell收起 - (void)shrinkCellWithAnimated:(BOOL)animated { //要刷新的index的集合 NSMutableArray *array1 = [[NSMutableArray alloc]init]; if(currentIndexPath) { //当前展开的cell的索引 [array1 addObject:currentIndexPath]; //将当前展开的cell的索引设为空 currentIndexPath = nil; [self reloadRowsAtIndexPaths:array1 withRowAnimation:UITableViewRowAnimationFade]; } } //查看传来的索引和当前被选中索引是否相同 - (BOOL)isEqualToSelectedIndexPath:(NSIndexPath *)indexPath { if(currentIndexPath) { return ([currentIndexPath row] == [indexPath row]) && ([currentIndexPath section] == [indexPath section]); } return NO; } /* 重写了这个方法,却无效,因为这个方法总在didSelect之前调用,很奇怪。因为无法重写该方法,所以ExtensibleTableView不算完善,因为还有额外的代码需要在heightForRowAtIndexPath和cellForRowAtIndexPath中。哪个找到完善的方法后希望可以与qq82934162联系或者在http://borissun.iteye.com来留言 */ //- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath //{ // if([currentIndexPath row] == [indexPath row]) // { // return [self.delegate_extend tableView:self extendedCellForRowAtIndexPath:indexPath]; // } // return [super cellForRowAtIndexPath:indexPath]; //} - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if([currentIndexPath row] == [indexPath row]) { return [self.delegate_extend tableView:self extendedHeightForRowAtIndexPath:indexPath]; } return [super rowHeight]; } @end
将这2个文件放到proj之后,要设置delegate_extend并且实现
//返回展开之后的cell
- (UITableViewCell *)tableView:(UITableView *)tableView extendedCellForRowAtIndexPath:(NSIndexPath *)indexPath;
//返回展开之后的cell的高度
- (CGFloat)tableView:(UITableView *)tableView extendedHeightForRowAtIndexPath:(NSIndexPath *)indexPath;
2个方法。
还有一点不合理的地方,我试着去解决,但是最终未果=。=!
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //若当前行被选中,则返回展开的cell if([tableView_ isEqualToSelectedIndexPath:indexPath]) { return [self tableView:tableView extendedCellForRowAtIndexPath:indexPath]; } ... }
这里要先判断当前行是否被选中,若被选中则调用extendedCellForRowAtIndexPath方法。因为我试着重写UITableView的- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath方法。试图在这个方法里做上边的事情,可是这个方法总是在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法之前被调用,因此没有达到预期的目标。
希望各位如果下载了源码,解决了这个问题的话,可以回到这里给我留言或者联系qq82934162.
以下是一个简单的demo源码:
http://dl.iteye.com/topics/download/4f242bbb-8004-3352-9604-b1211b7562df
评论
5 楼
jjhsing
2013-01-25
佩服。。。。。
4 楼
82934162
2012-10-31
东方皓 写道
cellForRowAtIndexPath 一直不都是在 didSelect 之前调用吗?难道在之后调用吗?
sorry,我写错了,我想写的是在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath之后。因此无法让被展开的cell直接在- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath是返回。。
谢谢哈
3 楼
东方皓
2012-10-17
cellForRowAtIndexPath 一直不都是在 didSelect 之前调用吗?难道在之后调用吗?
2 楼
wangjian1000096
2012-09-21
楼主,点击事件后第一行会抖动诶
1 楼
thinmonkey
2012-08-28
只有想不到的,没有做不到的,楼主很牛
发表评论
-
NSURLProtocol 的使用和封装
2017-05-18 18:07 2005NSURLProtocol的官方定义。 ... -
ARC下KVO注意事项
2015-12-07 11:40 671假设我们对A ViewController(暂时叫AVC)进行 ... -
iOS多线程访问非线程安全对象的crash
2015-05-27 16:39 4040多个线程在访问同一个非线程安全对象时,有可能会crash. 非 ... -
iOS today插件毛玻璃效果
2015-01-30 17:31 2880这里说的毛玻璃不是背景,而是文字以及按钮的毛玻璃效果.比如下图 ... -
UIWebView自适应宽度
2014-02-27 19:28 46990webview在手机上显示的内容经常非常宽,显示出来之后要 ... -
iOS7相机隐私判断
2013-12-19 17:31 9465装了iOS7的ip5的隐私设置里多了相机这一项(ip4装i ... -
iOS7相机隐私判断
2013-12-19 17:31 0装了iOS7的ip5的隐私设置里多了相机这一项(ip4装i ... -
XMPP登陆互踢
2013-02-20 16:16 10090如果JID的resource缺省 ... -
UIView加圆角会卡的解决办法
2012-07-18 20:22 3699做iOS开发的时候有可能经常碰到莫名其妙的滑动不顺畅(在UIS ... -
【转】CATransition的动画效果类型及实现方法
2012-06-26 15:42 1732实现iphone漂亮的动画效果主要有两种方法,一种是UIVie ... -
【转】iphone开发----计算MKMapView的缩放等级
2012-03-28 17:26 7595IOS的sdk中MKMapView并没有提供得到当前地图zoo ... -
viewWillDisappear,viewWillAppear不调用的解决方法
2012-03-01 12:28 27166产生原因是用了UINavigationController. ... -
【原】iOS通过http post上传图片
2012-01-09 19:51 85441由于iOS无法通过html表单 ... -
iOS真机测试,为Provisioning添加设备
2011-12-19 19:54 25683-------------添加设备到provisioning- ... -
禁止UIWebView的拖动
2011-11-28 17:50 5284UIWebView的自视图中的第一个,是和UIWebView同 ... -
OC将http转义字符转化为中文
2011-11-23 18:52 2889result = [result stringByRepl ... -
Objective-C Unicode 转换成中文【转】
2011-11-23 18:49 5284+ (NSString *)replaceUnic ...
相关推荐
1. **Cell的可扩展性**:首先,你需要为UITableView的cell定义两种状态,即展开和收起。你可以通过添加一个额外的标识符来跟踪每个cell的状态,并在`cellForRowAt`方法中根据这个状态决定是否显示子视图(如新的...
实现索引条需要实现UITableViewDelegate的`sectionIndexTitlesForTableView:`方法,返回一个包含所有可选section标题的数组。同时,还需要实现`tableView:sectionForSectionIndexTitle:atIndex:`方法,将用户的触摸...
这个“UITableView全选功能源码”就是为了解决这样的需求。 实现UITableView的全选功能,主要涉及到以下几个关键知识点: 1. **NSIndexPath**:NSIndexPath是iOS中的一个类,用于表示数组或表格中的位置。在...
由于工作需要,写了一个UITableView的子类,简单的实现了每个cell的展开和收缩的动画效果以及展开和收缩后的cell样式变化。这个效果也许你现在用不到,但是它在iOS上的效果确实很不错,也许以后你就会用到。分享给...
这个"安卓Android源码——UITableView ios风格控件.rar"压缩包文件很可能包含了一个开源项目,它旨在模仿iOS的UITableView的功能,使得Android应用能够拥有类似的用户界面和交互体验。 在iOS的UITableView中,它...
这个"Android应用源码之UITableView ios风格控件.rar"压缩包提供了在Android上模仿UITableView功能的源代码,帮助开发者构建更加流畅、一致的跨平台用户界面。以下是关于这个主题的详细知识点: 1. **仿UITableView...
当我们要实现展开和收缩功能时,我们需要为每个可展开的单元格添加一个标识,以便在用户点击时追踪其状态。 接下来,我们需要在UITableViewDataSource的方法中处理这种动态变化。`tableView(_:...
当用户点击一个可展开的单元格时,更新其展开状态,并调用`reloadRows(at:with:)`方法来刷新该单元格,以显示或隐藏子列表。 3. **数据模型扩展**:为了存储每个单元格是否展开的信息,我们需要扩展数据模型。每个...
本资源提供的"IOS开发-TableView表视图基础 源码"旨在帮助开发者掌握UITableView的基本使用方法和核心概念。 1. **UITableView介绍** UITableView是一个用于展示动态数据的滚动视图,它可以显示一行行的数据,每个...
`UITableView`的`cell`展开和收缩功能是提高用户体验的重要特性,特别是在处理层级结构数据时。标题"ios uitableview cell的展开收缩功能"涉及到的核心技术点包括`UITableViewDataSource`、`UITableViewDelegate`的...
iOS 开发中 UITableView 的使用详解 UITableView 是 iOS 开发中最常用的控件之一,用于显示列表数据。它类似于 Android 中的 ListView,都是用于显示列表数据的控件。在 iOS 开发中,UITableView 是一个非常重要的...
UITableView是iOS应用开发中不可或缺的一部分,特别是在Swift编程环境中。它是一种用于显示大量数据的视图控件,可以灵活地展示列表或表格形式的信息。在Swift中,UITableView的使用涉及到多个知识点,包括数据源...
总之,UITableView是iOS开发中不可或缺的一部分,通过学习和实践"**MyTableView**"示例,你应该对如何创建和管理UITableView有了基本的了解。进一步探索可以涉及到自定义单元格、异步加载数据、下拉刷新、无限滚动等...
本资源提供的“获取汉字汉语拼音首字母,UITableView中文也可以加index了功能ios源码.zip”正是解决这个问题的一个实例。 首先,我们需要理解如何获取汉字的拼音首字母。在iOS中,我们可以利用Foundation框架中的`...
本教程将详细讲解如何实现UITableView的展开和收起功能,使得用户可以点击某一行来显示或隐藏更多的详细信息。 首先,我们需要了解UITableView的基本结构。UITableView由多个UITableViewCell组成,每个cell代表列表...
4. **自定义Cell**:自定义UITableViewCell,添加一个可折叠的视图来显示子数据。根据数据模型的展开状态,决定是否显示这个视图。在`prepareForReuse`方法中,确保Cell被复用时恢复到初始状态。 5. **高度计算**:...
首先,我们需要理解UITableView的核心特点:它是iOS中用于显示一维数据列表的视图控件,通常包含可滚动的行集合,每行可以包含一个或多个单元格(cells)。这个库的目标是将这种体验带到Android平台,提供类似的滚动...
### UITableView教材:构建与操作教程 #### 一、Table的整个框架搭建 ##### 1、两种样式的初始化 UITableView 提供了两种不同的样式:`UITableViewStylePlain` 和 `UITableViewStyleGrouped`。这两种样式的选择取...
在iOS开发中,`UITableView` 是一个非常常用且强大的组件,用于展示列表数据。然而,在实际应用中,我们经常会遇到一个问题:当用户在`UITableView`中的输入框(如UITextField)中输入时,弹出的键盘可能会遮挡住...
这个压缩包“安卓Android源码——UITableView ios风格控件.zip”可能包含了一个仿照iOS UITableView实现的自定义控件,它允许Android开发者在他们的应用中引入类似于iOS的列表视图体验。 UITableView在iOS中是一个...