`
jsntghf
  • 浏览: 2544456 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

可伸缩的表视图

    博客分类:
  • iOS
阅读更多

头文件:

 

#import <UIKit/UIKit.h>

@interface TableMenuViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
	NSMutableArray *itemArray;
	NSMutableArray *openItemArray;
	UITableView *menuTable;
}

@property (nonatomic, retain) NSMutableArray *itemArray;
@property (nonatomic, retain) NSMutableArray *openItemArray;
@property (nonatomic, retain) IBOutlet UITableView *menuTable;

- (void)readPlistToArray;

@end

 

实现文件:

 

#import "TableMenuViewController.h"

@implementation TableMenuViewController

@synthesize itemArray, openItemArray, menuTable;

- (void)viewDidLoad {
	[super viewDidLoad];
	self.itemArray = [NSMutableArray arrayWithCapacity:0];
	self.openItemArray = [NSMutableArray arrayWithCapacity:0];
	[self readPlistToArray];
}

- (void)readPlistToArray {
	if ([self.itemArray count]) {
		[self.itemArray removeAllObjects];
	}
	
	NSString *path = [[NSBundle mainBundle] pathForResource:@"MenuOrder" ofType:@"plist"];
	NSArray *array = [NSArray arrayWithContentsOfFile:path];
	
	for (int i = 0; i < [array count]; i++) {
		NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:0];
		[dic setObject:@"0" forKey:@"level"];
		[dic setObject:[[array objectAtIndex:i] objectAtIndex:0] forKey:@"name"];
		[self.itemArray addObject:dic];
		
		for (int j = 0; j < [self.openItemArray count]; j++) {
			if ([[[self.openItemArray objectAtIndex:j] objectForKey:@"name"] 
					 isEqualToString:[[array objectAtIndex:i] objectAtIndex:0]]) {
				NSArray *ary = [array objectAtIndex:i];
				for (int k = 1; k < [ary count]; k++) {
					NSMutableDictionary *menuDic = [NSMutableDictionary dictionaryWithCapacity:0];
					[menuDic setObject:@"2" forKey:@"level"];
					[menuDic setObject:[ary objectAtIndex:k] forKey:@"name"];					
					[self.itemArray addObject:menuDic];	
				}
			}
		}
	}
}

#pragma mark -
#pragma mark Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
	return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
	return [self.itemArray count];
}

- (NSInteger)tableView:(UITableView *)tableView 
indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
{
	return [[[self.itemArray objectAtIndex:[indexPath row]] objectForKey:@"level"] intValue];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {	
	static NSString *CellIdentifier = @"Cell";
	
	UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
	if (cell == nil) {
		cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
	}
	
	NSDictionary *dic = [self.itemArray objectAtIndex:[indexPath row]];
	
	if(![[dic objectForKey:@"level"] intValue])
	{
		cell.selectionStyle = UITableViewCellSelectionStyleNone;		
		UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"menubackgroud.png"]];
		[cell setBackgroundView:imageView];		
	}
	else {
		cell.selectionStyle = UITableViewCellSelectionStyleBlue;
		UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"itembackgroud.png"]];
		[cell setBackgroundView:imageView];		
	}
	cell.textLabel.text = [dic objectForKey:@"name"];
	
	return cell;
}

#pragma mark -
#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
	NSDictionary *dic = [self.itemArray objectAtIndex:[indexPath row]];
	NSString *name = [dic objectForKey:@"name"];
	
	if(![[dic objectForKey:@"level"] intValue])
	{
		for (int i = 0; i < [self.openItemArray count]; i++) {
			if ([[[self.openItemArray objectAtIndex:i] objectForKey:@"name"] isEqualToString:name]) {
				[self.openItemArray removeObjectAtIndex:i];
				[self readPlistToArray];
				[self.menuTable reloadData];
				
				return;
			}
		}
		[self.openItemArray addObject:dic];
		[self readPlistToArray];
		[self.menuTable reloadData];
	}
	else {
		UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:(@"%@", name) delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
		[alert show];
		[alert release];
	}
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
	return 44;
}

- (void)dealloc {
	[itemArray release];
	[openItemArray release];
	[menuTable release];
	
	[super dealloc];
}

@end

 

示例图:


分享到:
评论
3 楼 nothinglhw 2013-06-27  
jsntghf 写道
nothinglhw 写道
楼主,求本项目的图片文档。。。

什么图片文档

背景图片~~
2 楼 jsntghf 2013-01-29  
nothinglhw 写道
楼主,求本项目的图片文档。。。

什么图片文档
1 楼 nothinglhw 2013-01-29  
楼主,求本项目的图片文档。。。

相关推荐

    AXStretchableHeaderTabViewController:可伸缩标题视图+水平可滑动选项卡视图

    可伸缩标题视图+水平可滑动选项卡视图 用法 运行示例项目; 克隆存储库,然后首先从Example目录运行pod install 。 屏幕截图 可伸缩页眉 可滑动的标签 安装 AXStretchableHeaderTabViewController可通过。 要安装它...

    可伸缩视频编码HEVC

    HEVC标准的研发始于H.264/AVC标准化完成之后,该标准旨在为工作室、多视图视频和可伸缩应用等不同服务和市场提供扩展标准。H.264/AVC的可伸缩扩展是这一努力的重要成果之一。其目标在于高效地支持多种视频质量、...

    一个支持可伸缩头部的布局

    "一个支持可伸缩头部的布局"是一种创新的UI设计,它允许用户在滚动内容时头部布局能够动态改变大小,提供了一种引人注目的交互体验。这种布局常用于如电商应用的商品详情页,顶部展示商品图片或信息,当向下滚动时会...

    listView伸缩实现.rar

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。然而,当需要实现更复杂的交互,比如二级展开、列表项的伸缩效果时,单纯的ListView就显得力不从心了。这时,我们需要引入...

    iOS展示视图移动的简单动画效果

    "iOS展示视图移动的简单动画效果"这一主题聚焦于如何在iOS应用中实现视图的动态伸缩和移动,为用户提供更加直观且吸引人的交互体验。 首先,我们来探讨一下iOS中的动画基础。iOS的动画主要是通过Core Animation框架...

    ListView+头部可伸缩+item可分组

    `ListView+头部可伸缩+item可分组`的主题涉及到对ListView的高级定制,以实现更丰富的交互效果和数据组织方式。这里我们将深入探讨如何实现这样一个功能强大的ListView。 首先,"头部可伸缩"是指ListView的顶部部分...

    可伸缩控件

    为了实现“可伸缩”的功能,我们需要重写`LinearLayout`的一些关键方法,如`onMeasure()`和`onLayout()`,这两个方法在确定视图大小和位置时起着核心作用。 1. **自定义ViewGroup**: 创建一个新的Java类,继承自`...

    自定义头部可伸缩ListView

    自定义头部可伸缩的`ListView`是一个结合了Android视图系统、触摸事件处理、动画和滚动行为的综合案例,对于深化对Android开发的理解和提升动手能力非常有帮助。通过这个项目,开发者不仅可以学习到如何扩展Android...

    仿qqTableview伸缩展示

    UITableView是iOS SDK中的一个关键组件,它用于显示一列可滚动的数据项,通常用于构建列表或表格视图。每个数据项对应一个UITableViewCell,可以自定义其样式和内容。 在实现“仿qqTableview伸缩展示”时,我们需要...

    分区表和分区视图.pdf

    分区视图可以是可更新的,也就是说,用户可以对视图进行插入、更新和删除操作,这些操作会自动传播到相应的分区表中。同时,也可以创建只读的分区视图,作为基础表的不可修改副本,用于数据展示或报表生成。 创建...

    可伸缩的android控件

    在Android开发中,创建可伸缩的控件是一项常见的需求,尤其在设计用户界面时,为了提供更好的用户体验,开发者往往需要实现自定义的动画效果。本文将深入探讨如何基于API 17创建一个可伸缩的Android控件,并讨论如何...

    可伸缩带农历万年历

    2. **用户界面设计**:可伸缩的日历视图是应用的一大亮点,这需要开发者熟练掌握Android的布局管理器,如LinearLayout、RelativeLayout、GridLayoutManager等,以及自定义ViewGroup的能力。同时,滑动效果和缩放动画...

    C#2.0可伸缩界面代码

    在C# 2.0版本中,开发人员经常会面临创建具有可伸缩界面的应用程序的需求。这样的界面能够根据用户屏幕的大小和分辨率自动调整布局,提供良好的用户体验。本压缩包中的"the365WinApp"文件可能包含了一个示例项目,...

    iOS开发控件,可伸缩的UITableView 仿QQ好友列表

    本教程将深入探讨如何创建一个可伸缩的UITableView,模仿QQ好友列表的功能。这样的设计可以提高用户体验,因为用户可以通过点击单元格来展开或收起子列表,使得大量信息的展示更加有序。 首先,我们需要了解...

    8种伸缩剑三维模型图纸

    6. **3D图纸**:在3D建模中,图纸通常包含多个视图,如前视图、侧视图和俯视图,以及细节特写,帮助制作者理解物体的各个角度和组成部分。图纸可能还包括颜色、材质和纹理的信息。 7. **资源应用**:这些伸缩剑的3D...

    自定义安卓时间轴,线可伸缩

    本项目标题为“自定义安卓时间轴,线可伸缩”,这意味着开发者构建了一个可以动态调整长度的时间轴组件,以适应不同长度的内容。这个特性使得时间轴能够有效地展示任何长度的信息,而不会因为内容过多导致布局拥挤...

    类似于QQ面板可伸缩的面板

    在IT行业中,创建类似QQ面板或微软Outlook界面的可伸缩控件是一项常见的需求,尤其是在开发用户界面(UI)时。这样的控件通常被称为OutlookBar或Docking Bar,它们提供了一种灵活的方式来组织和展示应用程序的功能,...

    android伸缩式悬浮窗

    在Android开发中,创建一个可伸缩式悬浮窗是一项实用且有趣的任务,它能为用户提供更灵活的操作体验。本文将详细讲解如何利用`WindowManager`实现这样的功能,并探讨相关技术要点。 首先,我们要理解`WindowManager...

    qt 动态伸缩效果实例

    在Qt框架中,动态伸缩效果通常涉及到图形视图(QGraphicsView)和动画框架(QPropertyAnimation)的使用,这些功能使得用户界面元素能够优雅地改变大小,从而增加交互性和视觉吸引力。以下是对"qt 动态伸缩效果实例...

Global site tag (gtag.js) - Google Analytics