- 浏览: 402321 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1928NSURLProtocol的官方定义。 ... -
ARC下KVO注意事项
2015-12-07 11:40 624假设我们对A ViewController(暂时叫AVC)进行 ... -
iOS多线程访问非线程安全对象的crash
2015-05-27 16:39 3989多个线程在访问同一个非线程安全对象时,有可能会crash. 非 ... -
iOS today插件毛玻璃效果
2015-01-30 17:31 2823这里说的毛玻璃不是背景,而是文字以及按钮的毛玻璃效果.比如下图 ... -
UIWebView自适应宽度
2014-02-27 19:28 46901webview在手机上显示的内容经常非常宽,显示出来之后要 ... -
iOS7相机隐私判断
2013-12-19 17:31 9413装了iOS7的ip5的隐私设置里多了相机这一项(ip4装i ... -
iOS7相机隐私判断
2013-12-19 17:31 0装了iOS7的ip5的隐私设置里多了相机这一项(ip4装i ... -
XMPP登陆互踢
2013-02-20 16:16 10043如果JID的resource缺省 ... -
UIView加圆角会卡的解决办法
2012-07-18 20:22 3641做iOS开发的时候有可能经常碰到莫名其妙的滑动不顺畅(在UIS ... -
【转】CATransition的动画效果类型及实现方法
2012-06-26 15:42 1669实现iphone漂亮的动画效果主要有两种方法,一种是UIVie ... -
【转】iphone开发----计算MKMapView的缩放等级
2012-03-28 17:26 7560IOS的sdk中MKMapView并没有提供得到当前地图zoo ... -
viewWillDisappear,viewWillAppear不调用的解决方法
2012-03-01 12:28 27092产生原因是用了UINavigationController. ... -
【原】iOS通过http post上传图片
2012-01-09 19:51 85245由于iOS无法通过html表单 ... -
iOS真机测试,为Provisioning添加设备
2011-12-19 19:54 25617-------------添加设备到provisioning- ... -
禁止UIWebView的拖动
2011-11-28 17:50 5244UIWebView的自视图中的第一个,是和UIWebView同 ... -
OC将http转义字符转化为中文
2011-11-23 18:52 2830result = [result stringByRepl ... -
Objective-C Unicode 转换成中文【转】
2011-11-23 18:49 5230+ (NSString *)replaceUnic ...
相关推荐
UITableViewDropDown 点击cell展开另外一个UITableView
[IOS笔记]UITableView及索引条
由于工作需要,写了一个UITableView的子类,简单的实现了每个cell的展开和收缩的动画效果以及展开和收缩后的cell样式变化。这个效果也许你现在用不到,但是它在iOS上的效果确实很不错,也许以后你就会用到。分享给...
安卓Android源码——UITableView ios风格控件.rar
UITableView、UITableView基本用法、UITableView详解,UITabelView常用方法
Android应用源码之UITableView ios风格控件.rar
iPhone的TableView,全选所有的行,详细源码和解释。
UITableView相关操作
获取汉字汉语拼音首字母,UITableView中文也可以加index了功能ios源码.zip
UITableView高度自适应解决方法 iOS 源码 下载
ios uitableview cell的展开收缩功能,网上找的不太好,自己写了一个~
iOS开发控件,可伸缩的UITableView 仿QQ好友列表,绝对真实
在iOS应用中,UITableView应该是使用率最高的视图之一了。iPod、时钟、日历、备忘录、Mail、天气、照片、电话、短信、 Safari、App Store、iTunes、Game Center几乎所有自带的应用中都能看到它的身影,可见它的重要...
UITableView Cache - UITableView 缓存
UITableView教材 IPHONE IPAD
UITableView 详细讲解
IOS UITableView UIcollectionView 结合
UITableView用来以表格的形式显示数据。关于UITableView,我们应该注意: (1)UITableView用来显示表格的可见部分,UITableViewCell用来显示表格的一行。 (2)UITableView并不负责存储表格中的数据,而是仅仅存储...
Android应用源码之UITableView ios风格控件.zip
安卓Android源码——UITableView ios风格控件.zip