表视图与导航的结合
来源:互联网 发布:win10桌面时钟软件 编辑:程序博客网 时间:2024/06/08 02:53
一、首先我们先创建一个iphone或ipad工程(本例以iphone为例)命名TableViewDemo1
如下图所示:
二、打开TableViewDemo1ViewController.xib,添加TableView控件。
三、编辑TableViewDemo1ViewController.h
添加实现的协议UITableViewDelegate,UITableViewDataSource,及声明UITableView对象tableViewList
四、打开TableViewDemo1ViewController.xib,IB设计器使TableView控件与之前声明的对象tableViewList做关联。
打开以上窗口,右键选中File's Owner并拖动至Table View上
在弹出菜单中选tableViewList
然后再右键选中Table View拖至File's Owner,淡出菜单如下
分别选中dataSource和delegate
至此IB设计完毕,下一步我们会在类中添加导航的实现代码。
五、添加实现代码
打开编辑TableViewDemo1ViewController.h
添加 NSMutableArray *dataItems;
打开编辑TableViewDemo1ViewController.m
在viewDidLoad中初始化dataItems
添加数据源, 由三个函数来回答数据绑定的请求:numberOfSectionsInTableView, numberOfRowsInSection 和 cellForRowAtIndexPath.
用numberOfSectionsInTableView方法来返回table中有几个组.
用numberOfRowsInSection方法来返回每个组里有几行
最后用cellForRowAtIndexPath来得到一个包含每一行显示信息的UITableViewCell对象. UITableViewCell类支持文本和图像,编辑和删除确认等功能. 这些信息会保存在表队列里,用来至此翻页等功能,但是内存很低的时候会自动释放,然后再需要的时候重新创建.
OK至此最基本的导航菜单我们算是完成了,运行一下看看效果
如下图所示:
二、打开TableViewDemo1ViewController.xib,添加TableView控件。
三、编辑TableViewDemo1ViewController.h
添加实现的协议UITableViewDelegate,UITableViewDataSource,及声明UITableView对象tableViewList
- @interface TableViewDemo1ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource> {
- IBOutlet UITableView *tableViewList;
- }
- @end
@interface TableViewDemo1ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource> {IBOutlet UITableView *tableViewList;}@end
四、打开TableViewDemo1ViewController.xib,IB设计器使TableView控件与之前声明的对象tableViewList做关联。
打开以上窗口,右键选中File's Owner并拖动至Table View上
在弹出菜单中选tableViewList
然后再右键选中Table View拖至File's Owner,淡出菜单如下
分别选中dataSource和delegate
至此IB设计完毕,下一步我们会在类中添加导航的实现代码。
五、添加实现代码
打开编辑TableViewDemo1ViewController.h
添加 NSMutableArray *dataItems;
- @interface TableViewDemo1ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource> {
- IBOutlet UITableView *tableViewList;
- NSMutableArray *dataItems;
- }
- @end
@interface TableViewDemo1ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource> {IBOutlet UITableView *tableViewList;NSMutableArray *dataItems;}@end
打开编辑TableViewDemo1ViewController.m
在viewDidLoad中初始化dataItems
- - (void)viewDidLoad {
- [super viewDidLoad];
- dataItems=[[NSMutableArray alloc]initWithObjects:@"中国",@"美国",@"日本",nil];
- }
- (void)viewDidLoad { [super viewDidLoad];dataItems=[[NSMutableArray alloc]initWithObjects:@"中国",@"美国",@"日本",nil];}
添加数据源, 由三个函数来回答数据绑定的请求:numberOfSectionsInTableView, numberOfRowsInSection 和 cellForRowAtIndexPath.
用numberOfSectionsInTableView方法来返回table中有几个组.
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- {
- return 1;
- }
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1;}
用numberOfRowsInSection方法来返回每个组里有几行
- - (NSInteger)tableView:(UITableView *)tableView
- numberOfRowsInSection:(NSInteger)section
- {
- return [dataItems count];
- }
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [dataItems count]; }
最后用cellForRowAtIndexPath来得到一个包含每一行显示信息的UITableViewCell对象. UITableViewCell类支持文本和图像,编辑和删除确认等功能. 这些信息会保存在表队列里,用来至此翻页等功能,但是内存很低的时候会自动释放,然后再需要的时候重新创建.
- // Customize the appearance of table view cells.
- - (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];
- }
- NSUInteger row=[indexPath row];
- cell.textLabel.text=[dataItems objectAtIndex:row];
- return cell;
- }
// Customize the appearance of table view cells.- (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]; }NSUInteger row=[indexPath row];cell.textLabel.text=[dataItems objectAtIndex:row]; return cell;}
OK至此最基本的导航菜单我们算是完成了,运行一下看看效果
TableViewDemo1.zip (674.1 KB)
在实例一我们做了一个最基本的导航列表(其实还没有导航功能,只不过简单的菜单而已),在本例中进一步丰富我们的导航列表,并增加导航功能,拭目以待吧!
一、首先先丰富一下导航列表
目标:1、加上图标;2、加上明细;3、加上导航按钮;
准备三个图标文件并拖拽到工程下的Resources下
在h文件中添加图标NSMutableArray *iconItems; NSMutableArray *detailItems;声明代码
@interface TableViewDemo1ViewController :
在m文件viewDidLoad添加iconItems的初始化代码
以上都准备好后修改UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法
注意实例化cell时注意样式由原来的UITableViewCellStyleDefault缺省改成UITableViewCellStyleSubtitle
添加导航按钮 在m文件中添加委托函数– tableView:accessoryTypeForRowWithIndexPath:
好现在我们执行程序看看
但是需要注意的时官方文档告诉我们accessoryTypeForRowWithIndexPath这个委托函数在iOS 3.0之后已经被废弃了,现在可以在UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中添加
cell.accessoryType= UITableViewCellAccessoryDetailDisclosureButton;
二、现在导航按钮已经有了但是只是个空按钮,下一步我们添加其功能
1、添加NextControlView类文件及NextControlView.xib文件,还有准备所需图片
2、编辑NextControlView.m
3、在TableViewDemo1ViewController.m中增加如下导航按钮的处理代码,
好,现在我们运行程序试一试
但是经过试验点击导航按钮时没有任何反应,这时怎么回事呢?我们再仔细分析一下上面的导航按钮处理函数,注意最后一行代码:[self.navigationController pushViewController:nextControlView animated:YES];是做切换画面功能的
那么self.navigationController 是什么?其实至此我们落掉了一个很重要的控制器即导航控制器,因为self 必须在navigation栈中,self.navigationController才不会为空,才可以帮助我们转化画面。下面我们来加上这个navigationController
首先更改TableViewDemo1AppDelegate.h代码如下:
增加navigationController 去掉viewController
在TableViewDemo1AppDelegate.m修改didFinishLaunchingWithOption函数如下
打开MainWindow.xib文件在IB设计器中删除原来的Table View Demo1 View Controller
增加一个Navigation Controller并且设置View Controller (Root View Controller)关联到TableViewDemo1ViewController
最后选择TableViewDemo1 App Delegate
如下图左键选中navigationController到Table View Demo1 View Controller做关联
关联后
OK至此我们导航控制器配置完毕,运行程序
分别点击中国、美国、日本一切正常显示见下图:
一、首先先丰富一下导航列表
目标:1、加上图标;2、加上明细;3、加上导航按钮;
准备三个图标文件并拖拽到工程下的Resources下
在h文件中添加图标NSMutableArray *iconItems; NSMutableArray *detailItems;声明代码
@interface TableViewDemo1ViewController :
- UIViewController<UITableViewDelegate,UITableViewDataSource> {
- IBOutlet UITableView *tableViewList;
- NSMutableArray *dataItems;
- NSMutableArray *iconItems;
- NSMutableArray *detailItems;
- }
- @end
UIViewController<UITableViewDelegate,UITableViewDataSource> {IBOutlet UITableView *tableViewList;NSMutableArray *dataItems;NSMutableArray *iconItems; NSMutableArray *detailItems;}@end
在m文件viewDidLoad添加iconItems的初始化代码
- - (void)viewDidLoad {
- [super viewDidLoad];
- dataItems=[[NSMutableArray alloc]initWithObjects:@"中国",@"美国",@"日本",nil];
- iconItems=[[NSMutableArray alloc]initWithObjects:@"cn",@"us",@"jp",nil];
- detailItems=[[NSMutableArray alloc]initWithObjects:@"China",@"America",@"Japan",nil];
- }
- (void)viewDidLoad { [super viewDidLoad];dataItems=[[NSMutableArray alloc]initWithObjects:@"中国",@"美国",@"日本",nil];iconItems=[[NSMutableArray alloc]initWithObjects:@"cn",@"us",@"jp",nil]; detailItems=[[NSMutableArray alloc]initWithObjects:@"China",@"America",@"Japan",nil];}
以上都准备好后修改UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法
注意实例化cell时注意样式由原来的UITableViewCellStyleDefault缺省改成UITableViewCellStyleSubtitle
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- static NSString *CellIdentifier = @"Cell";
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- //实例化cell时注意样式由原来的UITableViewCellStyleDefault缺省改成UITableViewCellStyleSubtitle
- cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
- }
- NSUInteger row=[indexPath row];
- //添加图标
- cell.imageView.image =[UIImage imageNamed:[NSString stringWithFormat:@"%@.gif",[iconItems objectAtIndex:row]]];
- cell.textLabel.text=[dataItems objectAtIndex:row];
- //添加明细
- cell.detailTextLabel.text =[detailItems objectAtIndex:row];
- // Configure the cell.
- return cell;
- }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { //实例化cell时注意样式由原来的UITableViewCellStyleDefault缺省改成UITableViewCellStyleSubtitle cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; }NSUInteger row=[indexPath row]; //添加图标cell.imageView.image =[UIImage imageNamed:[NSString stringWithFormat:@"%@.gif",[iconItems objectAtIndex:row]]];cell.textLabel.text=[dataItems objectAtIndex:row]; //添加明细 cell.detailTextLabel.text =[detailItems objectAtIndex:row];// Configure the cell. return cell;}
添加导航按钮 在m文件中添加委托函数– tableView:accessoryTypeForRowWithIndexPath:
- -(UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath{
- //返回类型选择按钮
- return UITableViewCellAccessoryDetailDisclosureButton;
- }
-(UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath{ //返回类型选择按钮 return UITableViewCellAccessoryDetailDisclosureButton; }
好现在我们执行程序看看
但是需要注意的时官方文档告诉我们accessoryTypeForRowWithIndexPath这个委托函数在iOS 3.0之后已经被废弃了,现在可以在UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中添加
cell.accessoryType= UITableViewCellAccessoryDetailDisclosureButton;
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- static NSString *CellIdentifier = @"Cell";
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- //实例化cell时注意样式由原来的UITableViewCellStyleDefault缺省改成UITableViewCellStyleSubtitle
- cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
- }
- NSUInteger row=[indexPath row];
- //添加图标
- cell.imageView.image =[UIImage imageNamed:[NSString stringWithFormat:@"%@.gif",[iconItems objectAtIndex:row]]];
- cell.textLabel.text=[dataItems objectAtIndex:row];
- //添加明细
- cell.detailTextLabel.text =[detailItems objectAtIndex:row];
- //导航按钮
- cell.accessoryType= UITableViewCellAccessoryDetailDisclosureButton;
- return cell;
- }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) {//实例化cell时注意样式由原来的UITableViewCellStyleDefault缺省改成UITableViewCellStyleSubtitle cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; }NSUInteger row=[indexPath row];//添加图标cell.imageView.image =[UIImage imageNamed:[NSString stringWithFormat:@"%@.gif",[iconItems objectAtIndex:row]]];cell.textLabel.text=[dataItems objectAtIndex:row];//添加明细 cell.detailTextLabel.text =[detailItems objectAtIndex:row];//导航按钮cell.accessoryType= UITableViewCellAccessoryDetailDisclosureButton; return cell;}
二、现在导航按钮已经有了但是只是个空按钮,下一步我们添加其功能
1、添加NextControlView类文件及NextControlView.xib文件,还有准备所需图片
2、编辑NextControlView.m
- - (void)viewDidLoad {
- self.imgArray = [[NSMutableArray alloc] init];
- for(int i=1;i<=3;i++)
- {
- NSString *imgName =[NSString stringWithFormat:@"img%d.jpg",i];
- [self.imgArray addObject:imgName];
- }
- [self.imgArray release];
- UIImageView *img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 436)];
- [img setImage:[UIImage imageNamed:[self.imgArray objectAtIndex:0]]];
- self.imgView = img;
- [self.imgView setContentMode:UIViewContentModeScaleAspectFit];
- [self.view addSubview:imgView];
- [img release];
- [imgView setImage:[UIImage imageNamed:[self.imgArray objectAtIndex:Page]]];
- self.title = [NSString stringWithFormat:@"image %@",[self.imgArray objectAtIndex:Page]];
- [super viewDidLoad];
- }
- (void)viewDidLoad {self.imgArray = [[NSMutableArray alloc] init];for(int i=1;i<=3;i++){NSString *imgName =[NSString stringWithFormat:@"img%d.jpg",i];[self.imgArray addObject:imgName];}[self.imgArray release];UIImageView *img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 436)];[img setImage:[UIImage imageNamed:[self.imgArray objectAtIndex:0]]];self.imgView = img;[self.imgView setContentMode:UIViewContentModeScaleAspectFit];[self.view addSubview:imgView];[img release];[imgView setImage:[UIImage imageNamed:[self.imgArray objectAtIndex:Page]]];self.title = [NSString stringWithFormat:@"image %@",[self.imgArray objectAtIndex:Page]]; [super viewDidLoad];}
3、在TableViewDemo1ViewController.m中增加如下导航按钮的处理代码,
- -(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
- NSInteger row = indexPath.row;
- nextControlView = [[NextControlView alloc] initWithNibName:@"NextControlView" bundle:nil];
- nextControlView.Page=row;
- [self.navigationController pushViewController:nextControlView animated:YES];
- }
-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{ NSInteger row = indexPath.row;nextControlView = [[NextControlView alloc] initWithNibName:@"NextControlView" bundle:nil]; nextControlView.Page=row;[self.navigationController pushViewController:nextControlView animated:YES]; }
好,现在我们运行程序试一试
但是经过试验点击导航按钮时没有任何反应,这时怎么回事呢?我们再仔细分析一下上面的导航按钮处理函数,注意最后一行代码:[self.navigationController pushViewController:nextControlView animated:YES];是做切换画面功能的
那么self.navigationController 是什么?其实至此我们落掉了一个很重要的控制器即导航控制器,因为self 必须在navigation栈中,self.navigationController才不会为空,才可以帮助我们转化画面。下面我们来加上这个navigationController
首先更改TableViewDemo1AppDelegate.h代码如下:
增加navigationController 去掉viewController
- @interface TableViewDemo1AppDelegate : NSObject <UIApplicationDelegate> {
- UIWindow *window;
- //TableViewDemo1ViewController *viewController;
- UINavigationController *navigationController;
- }
- @property (nonatomic, retain) IBOutlet UIWindow *window;
- //@property (nonatomic, retain) IBOutlet TableViewDemo1ViewController *viewController;
- @property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
- @end
@interface TableViewDemo1AppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; //TableViewDemo1ViewController *viewController;UINavigationController *navigationController;}@property (nonatomic, retain) IBOutlet UIWindow *window;//@property (nonatomic, retain) IBOutlet TableViewDemo1ViewController *viewController;@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;@end
在TableViewDemo1AppDelegate.m修改didFinishLaunchingWithOption函数如下
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
- //[self.window addSubview:viewController.view];
- [window addSubview:[navigationController view]];
- [self.window makeKeyAndVisible];
- return YES;
- }
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //[self.window addSubview:viewController.view];[window addSubview:[navigationController view]]; [self.window makeKeyAndVisible]; return YES;}
打开MainWindow.xib文件在IB设计器中删除原来的Table View Demo1 View Controller
增加一个Navigation Controller并且设置View Controller (Root View Controller)关联到TableViewDemo1ViewController
最后选择TableViewDemo1 App Delegate
如下图左键选中navigationController到Table View Demo1 View Controller做关联
关联后
OK至此我们导航控制器配置完毕,运行程序
分别点击中国、美国、日本一切正常显示见下图:
- 表视图与导航的结合
- 导航与天气的结合
- IOS之导航控制器与表视图
- 自定义导航栏与ViewPager的结合使用
- 普通结合导航栏与Viewpager的使用
- Unity3D视图与iOS视图结合
- 制作对话框与视图结合的分割窗口
- iOS 表视图控件当存在导航栏与Tabbar时内容的自动偏移
- 带有导航栏的视图坐标计算与详细分析
- 7 高级UI控件-导航控制器与表视图
- iOS基础控件-UITabBarController - 2 之UITabBarItem 详解,结合视图控制器和导航控制器的用法
- ViewPager与ActionBar结合实现导航
- ActionBar与ViewPager结合实现“书签导航”
- 视图导航页面的制作
- TODO标记 与 task视图 结合使用
- IOS UITableView表视图和导航控制器的交互使用
- iOS 导航控制器、标签、表视图的创建方法
- 【整理】输入导航功能-查询与拼音首字母的结合以提高用户体验
- pcDuino的linux移植三
- WinForm(C#)中跨线程访问控件的解决方法
- 增量备份文件工具
- istreambuf_iterator is not dereferencable
- 在Windows环境中使用版本管理工具Git
- 表视图与导航的结合
- ITEMIDLIST结构
- Git服务器Gitosis安装设置
- 美妙的模电2013/4/20
- 双口RAM
- 排列组合总结:将结果进行输出
- git服务器搭建
- hdoj_1548A strange lift
- ZOJ 3697 Bad-written Number