- 浏览: 2532010 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
jsntghf:
peio 写道这个怎么运行?Ruby On Rails的环境搭 ...
多文件上传之uploadify -
peio:
这个怎么运行?
多文件上传之uploadify -
往事如烟1:
我的项目是自己init了一个原始的project,之后将ver ...
React Native热部署之CodePush -
jsntghf:
往事如烟1 写道我按照你的说明进行,发现app退出之后,在进入 ...
React Native热部署之CodePush -
往事如烟1:
我按照你的说明进行,发现app退出之后,在进入不正确,请问是什 ...
React Native热部署之CodePush
以前,写了一篇文章:可伸缩的表视图,实现的是类似QQ的可折叠形式的表视图,这篇文章提供了另一种解决方案。
下面只列出表视图的相关代码,其他代码请参考附件。
RootNavigationController.h
#import <UIKit/UIKit.h> @interface RootNavigationController : UINavigationController { } @end #import "QQSectionHeaderView.h" @interface RootViewController : UITableViewController<QQSectionHeaderViewDelegate> { NSMutableArray *lists; } @end
RootNavigationController.m
#import "RootNavigationController.h" #import "QQList.h" @implementation RootNavigationController @end #define HEADER_HEIGHT 35 @implementation RootViewController - (void) loadQQData { for (int i = 0; i < 10; i++) { QQList *list = [[[QQList alloc] init] autorelease]; list.m_nID = i; list.m_strName = @"QQGroupName"; list.m_arrayPersons = [[[NSMutableArray alloc] init] autorelease]; list.opened = YES; for (int j = 0; j < arc4random() % 20; j++) { QQPerson *person = [[[QQPerson alloc] init] autorelease]; person.m_nQQNumber = 10000 + abs(arc4random() % 100000000); person.m_nListID = i; person.m_bIsOnline = arc4random() % 10 < 5 ? YES : NO; person.m_strNickName = @"[Eric]"; person.m_strRemarkName = arc4random() % 10 < 5 ? @"张三": @"李四"; person.m_strLongNickInfo = @"http://2015.iteye.com"; person.m_strHeadImageURLString = nil; [list.m_arrayPersons addObject:person]; } [lists addObject:list]; } } - (void)loadView { [super loadView]; lists = [[[NSMutableArray alloc] init] retain]; [self performSelector:@selector(loadQQData)]; } - (void)viewDidLoad { [super viewDidLoad]; [self setTitle:@"QQTableView"]; self.tableView.delegate = self; self.tableView.dataSource = self; } - (void)dealloc { [lists release]; [super dealloc]; } #pragma mark - #pragma mark Table view data source - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return HEADER_HEIGHT; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [lists count]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { QQList *persons = [lists objectAtIndex:section]; if ([persons opened]) { return [persons.m_arrayPersons count]; } else { return 0; } } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { QQList *persons = [lists objectAtIndex:section]; int onlineCount = 0; for (QQPerson *person in persons.m_arrayPersons) { if ([person isOnline]) { onlineCount++; } } NSString *headString = [NSString stringWithFormat:@"%@ [%d/%d] ", persons.m_strName, onlineCount, [persons.m_arrayPersons count]]; QQSectionHeaderView *sectionHeadView = [[QQSectionHeaderView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.tableView.bounds.size.width, HEADER_HEIGHT) title:headString section:section opened:persons.opened delegate:self]; return [sectionHeadView autorelease]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; } QQList *persons = [lists objectAtIndex:indexPath.section]; QQPerson *person = [persons.m_arrayPersons objectAtIndex:indexPath.row]; if ([person isOnline]) { [cell textLabel].text = person.m_strNickName; } else { [cell textLabel].text =[NSString stringWithFormat:@"%@ (Offline)", person.m_strNickName]; } [cell textLabel].font = [UIFont boldSystemFontOfSize:14.0]; [cell detailTextLabel].text = person.m_strLongNickInfo; [cell setImage:[UIImage imageNamed:@"headicon.jpg"]]; return cell; } - (void)sectionHeaderView:(QQSectionHeaderView *)sectionHeaderView sectionClosed:(NSInteger)section { QQList *persons = [lists objectAtIndex:section]; persons.opened = !persons.opened; NSInteger countOfRowsToDelete = [self.tableView numberOfRowsInSection:section]; if (countOfRowsToDelete > 0) { persons.indexPaths = [[NSMutableArray alloc] init]; for (NSInteger i = 0; i < countOfRowsToDelete; i++) { [persons.indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:section]]; } [self.tableView deleteRowsAtIndexPaths:persons.indexPaths withRowAnimation:UITableViewRowAnimationTop]; } } - (void)sectionHeaderView:(QQSectionHeaderView *)sectionHeaderView sectionOpened:(NSInteger)section { QQList *persons = [lists objectAtIndex:section]; persons.opened = !persons.opened; if(persons.indexPaths) { [self.tableView insertRowsAtIndexPaths:persons.indexPaths withRowAnimation:UITableViewRowAnimationBottom]; } persons.indexPaths = nil; } @end
示例图:
- TQQTableView.zip (45.2 KB)
- 下载次数: 72
发表评论
-
Error watching file for changes: EMFILE
2016-12-15 11:57 1300执行npm start后报错: Error watc ... -
CocoaPods升级1.1.1报错
2016-12-15 08:39 794ERROR: While executing gem .. ... -
Visual Studio Code运行React Native报错
2016-06-13 09:43 1614React Native:0.27.2 React:15 ... -
React Native 0.27.2编译报错this._nativeModule.addListener is not a function
2016-06-12 15:21 3854React Native:0.27.2 React:15 ... -
Unable to resolve module ReactDefaultPerf from
2016-06-02 13:04 2784package.json信息如下: "reac ... -
React Native 0.26.2编译报错Undefined symbols for architecture x86_64
2016-05-26 11:15 2019React Native:0.26.2 React:15. ... -
Failed to update auto layout status: Failed to load designables from path (null)
2016-04-05 22:11 1714确保CocoaPods是0.36.1以上版本,然后在podf ... -
集成微信支付出现Undefined symbols for architecture x86_64错误
2016-03-21 13:22 1751Undefined symbols for architec ... -
React Native热部署之CodePush
2016-01-10 22:27 6244本文使用的环境是Mac OS 10.11.1、Xcode ... -
浅谈React Native中的FlexBox布局
2015-11-17 18:38 4305React Native通过一个基于FlexBox的布局引 ... -
React Native之构建一个简单的列表页
2015-10-23 14:45 2162本文中我们将创建一个简单的电影应用,这个应用将从Rotten ... -
React Native之环境搭建
2015-10-20 16:30 1446本文使用的环境是Mac O ... -
获取图片属性的方法
2015-10-18 20:43 3144很多时候我们需要获 ... -
NSCache的下标用法
2015-09-18 00:19 1214NSCache类和NSDictionary类很相似,也提供 ... -
如何给category添加属性
2015-08-16 10:41 692主要是使用了runtime中的associative机制。 ... -
UITableView的两种重用Cell方法的区别
2015-08-10 13:07 16147UITableView中有两种重用Cell的方法: - ... -
SDImageCache.m报错Unused variable 'fileName'
2015-08-04 21:56 1174GCC手册中的相关解释: unused:This att ... -
Swift调用Objective-C
2015-07-13 23:33 1227Swift调用Objective-C需要一个名为<工程 ... -
使用GCD实现倒计时
2015-07-24 21:47 1084__block int timeout = 60; // ... -
导航栏加分割线的实现
2015-07-01 22:00 1763self.view.backgroundColor = [U ...
相关推荐
然而,当需要实现更复杂的交互,比如二级展开、列表项的伸缩效果时,单纯的ListView就显得力不从心了。这时,我们需要引入ExpandableListView。"listView伸缩实现"这个项目就是针对这种需求的一个实例,提供了代码...
HEVC标准的研发始于H.264/AVC标准化完成之后,该标准旨在为工作室、多视图视频和可伸缩应用等不同服务和市场提供扩展标准。H.264/AVC的可伸缩扩展是这一努力的重要成果之一。其目标在于高效地支持多种视频质量、...
"一个支持可伸缩头部的布局"是一种创新的UI设计,它允许用户在滚动内容时头部布局能够动态改变大小,提供了一种引人注目的交互体验。这种布局常用于如电商应用的商品详情页,顶部展示商品图片或信息,当向下滚动时会...
可伸缩标题视图+水平可滑动选项卡视图 用法 运行示例项目; 克隆存储库,然后首先从Example目录运行pod install 。 屏幕截图 可伸缩页眉 可滑动的标签 安装 AXStretchableHeaderTabViewController可通过。 要安装它...
"iOS展示视图移动的简单动画效果"这一主题聚焦于如何在iOS应用中实现视图的动态伸缩和移动,为用户提供更加直观且吸引人的交互体验。 首先,我们来探讨一下iOS中的动画基础。iOS的动画主要是通过Core Animation框架...
`ListView+头部可伸缩+item可分组`的主题涉及到对ListView的高级定制,以实现更丰富的交互效果和数据组织方式。这里我们将深入探讨如何实现这样一个功能强大的ListView。 首先,"头部可伸缩"是指ListView的顶部部分...
自定义头部可伸缩的`ListView`是一个结合了Android视图系统、触摸事件处理、动画和滚动行为的综合案例,对于深化对Android开发的理解和提升动手能力非常有帮助。通过这个项目,开发者不仅可以学习到如何扩展Android...
为了实现“可伸缩”的功能,我们需要重写`LinearLayout`的一些关键方法,如`onMeasure()`和`onLayout()`,这两个方法在确定视图大小和位置时起着核心作用。 1. **自定义ViewGroup**: 创建一个新的Java类,继承自`...
UITableView是iOS SDK中的一个关键组件,它用于显示一列可滚动的数据项,通常用于构建列表或表格视图。每个数据项对应一个UITableViewCell,可以自定义其样式和内容。 在实现“仿qqTableview伸缩展示”时,我们需要...
分区视图可以是可更新的,也就是说,用户可以对视图进行插入、更新和删除操作,这些操作会自动传播到相应的分区表中。同时,也可以创建只读的分区视图,作为基础表的不可修改副本,用于数据展示或报表生成。 创建...
在Android开发中,创建可伸缩的控件是一项常见的需求,尤其在设计用户界面时,为了提供更好的用户体验,开发者往往需要实现自定义的动画效果。本文将深入探讨如何基于API 17创建一个可伸缩的Android控件,并讨论如何...
在C# 2.0版本中,开发人员经常会面临创建具有可伸缩界面的应用程序的需求。这样的界面能够根据用户屏幕的大小和分辨率自动调整布局,提供良好的用户体验。本压缩包中的"the365WinApp"文件可能包含了一个示例项目,...
2. **用户界面设计**:可伸缩的日历视图是应用的一大亮点,这需要开发者熟练掌握Android的布局管理器,如LinearLayout、RelativeLayout、GridLayoutManager等,以及自定义ViewGroup的能力。同时,滑动效果和缩放动画...
本教程将深入探讨如何创建一个可伸缩的UITableView,模仿QQ好友列表的功能。这样的设计可以提高用户体验,因为用户可以通过点击单元格来展开或收起子列表,使得大量信息的展示更加有序。 首先,我们需要了解...
6. **3D图纸**:在3D建模中,图纸通常包含多个视图,如前视图、侧视图和俯视图,以及细节特写,帮助制作者理解物体的各个角度和组成部分。图纸可能还包括颜色、材质和纹理的信息。 7. **资源应用**:这些伸缩剑的3D...
本项目标题为“自定义安卓时间轴,线可伸缩”,这意味着开发者构建了一个可以动态调整长度的时间轴组件,以适应不同长度的内容。这个特性使得时间轴能够有效地展示任何长度的信息,而不会因为内容过多导致布局拥挤...
在IT行业中,创建类似QQ面板或微软Outlook界面的可伸缩控件是一项常见的需求,尤其是在开发用户界面(UI)时。这样的控件通常被称为OutlookBar或Docking Bar,它们提供了一种灵活的方式来组织和展示应用程序的功能,...
在Android开发中,创建一个可伸缩式悬浮窗是一项实用且有趣的任务,它能为用户提供更灵活的操作体验。本文将详细讲解如何利用`WindowManager`实现这样的功能,并探讨相关技术要点。 首先,我们要理解`WindowManager...
在Qt框架中,动态伸缩效果通常涉及到图形视图(QGraphicsView)和动画框架(QPropertyAnimation)的使用,这些功能使得用户界面元素能够优雅地改变大小,从而增加交互性和视觉吸引力。以下是对"qt 动态伸缩效果实例...