- 浏览: 161741 次
- 性别:
- 来自: 大连
最新评论
-
xueyw:
http://www.devdiv.com/forum-iph ...
iPhone开发网站、论坛、博客 -
Meggie_love:
受教了
游戏算法整理 算法七 无限大地图的实现 -
xueyw:
http://www.devdiv.net/bbs/forum ...
iPhone开发网站、论坛、博客 -
junlas:
APE 物理引擎与 Box2D 物理引擎对比 -
ha397666:
5、扩展的点已经被扩展过了。当扩展节点的时候,每个节点都是向四 ...
游戏算法整理 算法六:关于SLG中人物可到达范围计算的想法
Introduction
介绍
In this tutorial, you will learn
how to navigate to the detail view and also pass some data at the same
time. This is the second tutorial in the UITableView tutorial series
and inherits its source code from the first tutorial.
在这篇教程中,你将学会如何导航到细节视图(detail view)并同时传递一些数据。这是UITableView系列教程中的第二篇,本篇教程继承我们在上一篇教程中所用到的代码和方法。
Creating a detail view
创建一个细节视图
Open
Interface Builder and click on File -> New -> (select Cocoa
Touch) View, save it in the application directory and name it
"DetailView". You will be asked to add the view to the current project,
click on "Add". You may need to drag the view (in XCode) to the
"Resources" folder. Now that you have your view, we will create a view
controller class to control the view on the screen. In XCode select
Classes then click on File -> New File -> (under iPhone OS)
select UIViewController subclass and name it "DetailViewController, do
not change the extension. Now we have to connect the view to the view
controller we just created. In Interface Builder, select File's Owner
and open Identity Inspector, under class Identity set the class to
"DetailViewController", open Connections Inspector and create a
connection from the view property to the view object in the nib file.
打
开Interface Builder,点击File -> New -> (select Cocoa Touch)
View,保存在我们第一篇所创建的应用程序里并命名为"DetailView"。同时,程序会提示你是否添加到当前项目中,选择“ADD”。为使得我们
的代码管理界面看起来更整齐,你需要拖放这个视图文件(在Xcode项目管理界面里)到"Resources"文件夹。现在我们有了视图,我们将创建一个
视图控制类(view controller
class)来控制视图在屏幕上的显示情况。在Xcode项目管理界面中中选择Classes,然后点击File -> New File
-> (under iPhone OS) select UIViewController
subclass然后命名为"DetailViewController",不要改变扩张名。现在,让我们来连接视图和我们刚刚创建的视图控制类。在
Interface Builder中选择File's Owne,并且打开Identity Inspecto,在class
Identity条目中设置为"DetailViewController",在nib文件中,打开Connections
Inspector并且创建连接从view property 到 the view object。
Now add controls to
the view which will display the detail contents. The controls that you
may want to add to the view, depends on the data you want to display.
We will display the country selected in the table view, so a simple
label should do. Drag and drop the label on the view. We need some way
to change the text of the label from XCode, create a variable of type
UILabel in xcode and connect it with the label object on the view. The
label should be declared with IBOutlet property, so it shows up in the
Connections Inspector. This is how the code looks like
现在给我们的细节视图添加控制
程序。控制程序需要要能根据我们想要展示的数据而提供视图。我们将显示我们在table
view中所选的国家,所以需要一个简单的label标签。从lib中拖一个label标签放到view视图上。在程序中我们需要通过一些方式来改变
label的值,所以在程序中创建一个UILabel类型的变量,和view视图上的label标签相连接,并声明为IBOutlet属性,以便可以再连
接控制器(Connections Inspector)中显示。最后的代码如下:
//DetailViewController.h
#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController {
IBOutlet UILabel *lblText;
}
@end
//Dealloc method declared in DetailViewController.m
- (void)dealloc {
[lblText release];
[super dealloc];
}
After
you have declared the variable, open IB and connect the variable to the
label placed on the view in Connections Inspector. Now we can change
the label's properties from XCode.
声明该变量后,打开IB使用Connections Inspector和view视图上的label连接。现在我们可以通过程序来改变label的属性了。
Navigate to the detail view
导航到细节视图界面
The
method tableView:didSelectRowAtIndexPath is called when a row is
selected, it passes the tableview object with the indexPath object to
tell us which row was selected. First import the "DetailViewController"
class in RootViewController, so it knows about it. The following code
will initialize the detail view and display it
当选择table view中的一行时,
tableView:didSelectRowAtIndexPath 方法会被调用,同时传递所选行的索引参数(the indexPath
object)。首先,在RootViewController中引入"DetailViewController"类。下面的代码将初始化细节视图并显
示。
//RootViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:dvController animated:YES];
[dvController release];
dvController = nil;
}
A
"DetailViewController" is created, initialized with
initWithNibName:bundle message and the name of the nib file is passed
as the parameter. The view controller is then push to the top of the
stack with its animated property set to YES. At last, we clean up
memory by releasing the detail view controller. Run the application and
now you can select a row to see the detail view.
代码说明:程序运行,创建并初始
化"DetailViewController"对象。通过initWithNibName:bundle方法传递窗口文件名称。视图控制器会被推向顶
层,并设置动画转换为真。最后我们在内存中释放细节视图控制器。运行程序,你可以选择一行看到细节视图界面的效果。
Passing data
传递数据
We
still have to pass the selected country from the list to the detail
view. To do this, we will declare a property in "DetailViewController"
whose data type is the same as the in the array, in our case NSString.
This is what you have to do if you want to pass data from one view
controller to another. The following code declares a property in
"DetailViewController"
现在我们还需要从table
view中传递所选数据给细节视图。好的,让我们现在就开始来实现它。首先,在"DetailViewController"中声明所传递的数据类型和
array中的一致,在本例中为NSString。下面DetailViewController文件中的代码实现了我们的想法。
//DetailViewController.h
#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController {
IBOutlet UILabel *lblText;
NSString *selectedCountry;
}
@property (nonatomic, retain) NSString *selectedCountry;
@end
//Dealloc method declared in DetailViewController.m
- (void)dealloc {
[selectedCountry release];
[lblText release];
[super dealloc];
}
//First three lines of DetailViewController.m
#import "DetailViewController.h"
@implementation DetailViewController
@synthesize selectedCountry;
The
property is synthesized at the top after the implementation begins. Now
we can pass the selected country from the table view to the detail
view. The tableView:didSelectRowAtIndexPath method looks like this
声明的特性将会在实体程序开始执行之前生效。现在我们能通过在table view中传递所选的国家给细节视图。tableView:didSelectRowAtIndexPath方法中的代码如下:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Get the selected country
NSString *selectedCountry = [listOfItems objectAtIndex:indexPath.row];
//Initialize the detail view controller and display it.
DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];
dvController.selectedCountry = selectedCountry;
[self.navigationController pushViewController:dvController animated:YES];
[dvController release];
dvController = nil;
}
We
first get the selected country from the array, initialize the detail
view controller, set the selected country to the property on the detail
view controller and display it.
我们首先从列表中获得所选国家,初始化detail view controller,设置所选国家在detail view controller声明并显示
Setting the accessory view
设置附属视图
Run
the app and now we are able to select a row in a table view. However,
it is not obvious to the user that a row can be selected to see its
detail view. We can add a "accessory view" to the cell which will show
up at the right end of the row. The accessory view can be set up in
tableView:cellForRowAtIndexPath method or in
tableView:accessoryTypeForRowWithIndexPath. We will use the later
method to keep our code simple. This is how the source code changes
运
行程序,现在我们能在table view中选择一行。尽管如此,用户显然不会很明白可以选择table
view中的一行数据并查看细节视图。我们可以在table cell的右侧添加附属视图"accessory
view"。附属视图设置的方法为tableView:cellForRowAtIndexPath或者用
tableView:accessoryTypeForRowWithIndexPath。我将使用后面的方法以便保持本例代码的简介性,最后的修改代码
为:
//RootViewController.m
- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath {
//return UITableViewCellAccessoryDetailDisclosureButton;
return UITableViewCellAccessoryDisclosureIndicator;
}
The
above method returns an enum UITableViewCellAccessoryType and we can
return four values: UITableViewCellAccessoryNone,
UITableViewCellAccessoryDisclosureIndicator,
UITableViewCellAccessoryDetailDisclosureButton, and
UITableViewCellAccessoryCheckmark. You can test the code by returning
one of the four values to see how the accessory view looks like. If you
return "UITableViewCellAccessoryDetailDisclosureButton" clicking on the
button will not do anything, since the cell is not selected but a
button is clicked. The SDK does provide a method which gets called when
the accessory button is clicked and that is called
tableView:accessoryButtonTappedForRowWithIndexPath. In this method we
can call tableView:didSelectRowAtIndexPath which will load the detail
view and this is how the code will look like
以上方法返回一个枚举类型
UITableViewCellAccessoryType,可选值有四个:UITableViewCellAccessoryNone,
UITableViewCellAccessoryDisclosureIndicator,
UITableViewCellAccessoryDetailDisclosureButton,和
UITableViewCellAccessoryCheckmark。你可以尝试不同的值,并注意table
cell样式的变化。如果返回"UITableViewCellAccessoryDetailDisclosureButton",点击按钮将不会有任
何变化,那是因为table cell不会被选择,当我们点击一个按钮时。当点击附属视图的按钮时,在SDK中提供了一个方法可以获得回调。该方法为
tableView:accessoryButtonTappedForRowWithIndexPath。在这个方法中我们调用
tableView:didSelectRowAtIndexPath方法,而加载细节视图。实现代码如下:
//RootViewController.m
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
[self tableView:tableView didSelectRowAtIndexPath:indexPath];
}
The last thing we need to do in detail view controller, is to display the selected country on the label. Do it in viewDidLoad method and this is how the code looks like
// DetailViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
//Display the selected country.
lblText.text = selectedCountry;
//Set the title of the navigation bar
self.navigationItem.title = @"Selected Country";
}
The
method "viewDidLoad" gets called when the view is loaded, where we set
the selected country by setting the text property of the label
"lblText". The title of the navigation bar is also set in the same
method.
viewDidLoad方法会在视图加载完成后调用,在这时我们设置所选国家并设置为"lblText"标签的属性。
Conclusion
结论
We
have seen how to display a list of items in a table view, how to select
a row and display the detail view, and in the next tutorial we will
look at how to search the list of items in a table view. I hope you
found this tutorial helpful and if you have any questions, please send
me an email. Don't forget to leave a comment.
我们已经学习到如何使用table view显示条目列表视图,如何选择一个条目并显示其细节视图。在下一篇教程中我们将学习如何在table view中搜索条目。希望这些文字对你有用,同时如果你有任何问题可以提出来,可以发邮件给我。当然不要忘记留下你的评论。
翻译:http://blog.laifangwen.com
译文:http://blog.laifangwen.com/htmldata/iPhone/2009/06/16/221.html
作者:http://www.iphonesdkarticles.com
英文:http://www.iphonesdkarticles.com/2009/01/uitableview-loading-detail-view.html
Happy Programming,
iPhone SDK Articles
原创翻译,欢迎转载,但需保留作者信息和翻译者信息,谢谢!
本例UITableView
源码下载:
发表评论
-
UIPickerView – spinning multiple components
2010-08-24 16:24 1615I found an interesting issues w ... -
UITableView效果收集
2010-07-10 12:28 2908某些打不开需翻()墙 Customizing the bac ... -
日期处理
2010-03-17 22:58 1177NSDateFormatter *dateFor ... -
uninstall xcode
2010-02-08 02:35 1731How to uninstall Xcode and ... -
从一个url中获得文本信息(转)
2010-01-21 11:37 1385有时候你可能需要从一个url中获取一个文本文件中的信息。 下面 ... -
将图片保存在iPhone的相册中(转)
2010-01-21 11:28 2926有时候你的应用需要将应用中的图片保存到用户iPhone或者iT ... -
一些遊戲製作有關的博客(转)
2010-01-20 14:57 1179站長在收集站內朋友的博客,然後把它們列出來方便大家看,這的確是 ... -
Beautiful Snowflakes
2010-01-14 18:51 1465It is a application that displa ... -
Layer Programming with Quartz Core
2010-01-08 14:11 3522《转载》 2009/6/25 ... -
如何移除Three20中private API
2010-01-07 22:04 1832Three20 是一个非常有 ... -
iphone下Three20库(From Facebook)的设置使用方法
2010-01-07 22:03 4026Three20是一个编译的静态类库 ,在Xcode中的项目实 ... -
Opera Masks
2010-01-07 01:13 1685It is a application that introd ... -
Java读取星际译王(StarDict)词库
2010-01-06 18:08 2625下面的文件是StarDict的词库格式说明文件: Form ... -
iPhone Coding Tutorial – Creating an Online Leaderboard For Your Games4
2010-01-06 11:06 1522Submitting High Scores To The ... -
iPhone Coding Tutorial – Creating an Online Leaderboard For Your Games3
2010-01-06 11:02 1068Displaying The Scores Table ... -
iPhone Coding Tutorial – Creating an Online Leaderboard For Your Games2
2010-01-06 11:01 734Inserting Scores Into The Dat ... -
iPhone Coding Tutorial – Creating an Online Leaderboard For Your Games1
2010-01-06 10:59 1096As you may have seen, there a ... -
iPhone Coding Tutorial – Inserting A UITextField In A UIAlertView
2010-01-06 10:44 1611This will be a simple tutorial ... -
iPhone Coding Tutorial – In Application Emailing
2010-01-06 10:36 1205A lot of applications you see ... -
Objective-C内存管理总结〜CC专版
2009-12-28 11:09 3013之前写过类似的文章,这篇以做总结,希望能帮助刚上船的兄弟。^_ ...
相关推荐
这个实例“UITableView系列二:资料的设定方式(Navigation Controller切换视图)”将深入探讨如何在UITableView中设置数据,以及如何通过Navigation Controller实现视图间的切换。在这个过程中,我们将涉及到Swift...
在本教程中,我们将深入探讨UITableView的系列知识,特别是如何在实际项目中实现行的添加、移动和删除操作。这些功能是用户交互的重要组成部分,使应用程序更加动态和用户友好。 首先,我们需要理解UITableView的...
本教程将详细介绍如何通过纯代码方式创建一个简单的UITableView,这对于初学者来说是一次很好的实践。 首先,我们需要理解UITableView的基本组成部分。UITableView由两大部分构成:数据源(DataSource)和委托...
本教程将详细讲解如何在Swift中利用AutoLayout对UITableView的TableHeader和TableFooter进行布局。 首先,了解UITableView的结构。UITableView包含多个单元格(UITableViewCell)以及可选的头部视图...
这段代码首先确保传入的scrollView是UITableView实例,然后获取tableHeader视图和其原始高度。接着,我们获取滚动视图的contentOffset,它表示滚动视图的内容相对于其顶部的距离。当用户向下滚动时,contentOffsetY...
本示例"table view使用"是一个简单的UITableView的使用教程,通过它我们可以学习如何在应用中有效地运用UITableView。 首先,我们要创建一个UITableView的实例。在Swift中,我们通常在UIViewController的子类中实现...
3. **View**:在MVVM中,View通常是指界面元素,如`UITableView`。在这里,View不直接与Model交互,而是通过绑定到ViewModel来获取和更新数据。在iOS中,我们可以使用`KVO(Key-Value Observing)`或者` Combine`...
UITableView *table1 = [[UITableView alloc] initWithFrame:CGRectMake(0, 0.00, 300, 250)]; table1.autoresizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleHeight); table1....
如果通过代码,可以创建UITableView并添加为ViewController的子视图。 2. **设置DataSource和Delegate**: 为了使UITableView能显示数据并响应用户操作,你的ViewController需要遵循`UITableViewDataSource`和`...
本教程将深入探讨如何在Objective-C中配置和使用UITableView。我们将覆盖以下关键知识点: 1. **UITableView的基本结构**: - `UITableView` 类是显示行和列数据的视图控件,通常用于创建列表或表格。 - `...
这个“UITableView Demo实例”是针对如何有效地使用UITableView进行编程的一个示例项目,它涵盖了创建表格视图、定义单元格样式、处理用户交互等多个核心知识点。 首先,我们来详细讨论UITableView的基本使用。...
你可以通过以下代码创建一个UITableView: ```swift let tableView = UITableView(frame: view.bounds, style: .plain) tableView.dataSource = self tableView.delegate = self view.addSubview(tableView) ``` ...
10. **自定义分段控制器(Segmented Control)**:如果Table View与分段控制器一起使用,可以创建多视图切换的效果,为用户提供不同的数据视图。 11. **SwiftUI 或 Interface Builder**:根据源码是使用Swift还是...
3. **多段TableView**:如果项目中需要展示多个Table View,可以使用多个UITableView实例,每个实例对应一个独立的数据源和代理。也可以通过在同一个TableView中创建多个Section来实现类似的效果。 4. **数据源协议...
在iOS开发中,UITableView是一种常用的UI组件,用于展示列表数据。在进行自定义表视图操作时,我们可能需要对单元格(UITableViewCell)的编辑功能进行控制,比如隐藏默认的删除按钮或者更改其标题。本篇文章将深入...
这个"android-uitableview-master"项目就是专为Android开发者设计的一个开源库,它模仿了iOS中的UITableView控件,使得在Android上也能轻松创建具有分组功能的列表视图。 首先,我们要理解在iOS中的UITableView是一...
UITableView-StickyHeader UITableView 类别,允许表头始终贴在顶部由于这是一个类别,您的代码不需要更改。 只需将 UITableView+StickyHeader.h/m 包含到您的项目中即可。 启用粘性标题: myTableView.stickyHeader...
本教程将深入探讨UITableView的简单使用,帮助开发者快速掌握其核心概念和基本功能。 首先,UITableView是由两部分组成:数据源(DataSource)和委托(Delegate)。数据源负责提供单元格内容,而委托则处理用户与...
本教程将带你入门iPhone上的UITableView使用,通过一个简单的示例项目"**MyTableView**"来深入理解其工作原理和基本操作。 首先,UITableView的主要组成部分包括:表头(HeaderInSection)、表尾(FooterSection)...