- 浏览: 268551 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
hyxj1220:
原来是这么回事,,谢谢了
document的execCommand解释 -
zouhongmin:
太强了,我膜拜你,要向你学习。
减肥日志 -
codeboy_wang:
超炫 超喜欢
document的execCommand解释 -
laiang8283:
博主男的女的,100斤也不是很胖啊
减肥日志 -
yixiaof:
博主真有毅力啊。
减肥日志
http://www.trappers.tk/site/2011/06/16/mainwindow-xib/
1,首先是数组赋值时注意最后一个nil不能少。
NSArray * array =[ [NSArray alloc]initWithObjects:@"m1",@"m2",@"m3",nil];
2.界面启动不起来的话看viewDidLoad方法
3. 如果是2个表格则创建两个TableView对象,然后在IB中连接上去。然后再在numberOfRowsInSection方法和cellForRowAtIndexPath里判断是哪个表格对象
if(tableView == self.tab1)
return [self.listData count];
else if(tableView == self.tab2)
return [ self.listData count];
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
iphone tableview 一些常用方法
-(UITableViewCell *)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
2. UITableViewDelegate方法
控制表格哪些行可以选中的方法
-(NSIndexPath *)tableView:(UITableView *)tableView
willSelectRowAtIndexPath:(NSIndexPath*)indexPath
/////////////////////////////////////////////////////////////////////////////////////////////////////////
创建简单表视图
主要介绍表示图的建立,数据源和委托等一些简单的方法。
1.新建Empty Application,命名SimpleTable
2.新建UIviewController subclass,取名SimpleTableViewController,并选中创建xib文件。
3.接下来在SimpleTableViewController.xib中布局,拖动一个TableView到Objects中,使其成为View的子视图。很明显,这里就是我们要构建子视图的地方啦。如何把这个子视图添加到window中去呢?我们看到在SimpleTableAppDelegate中已经建立了一个table,现在我们需要在此添加一个输出口来实例化我们在interface builder总布置的表视图。
// SimpleTableAppDelegate.h
#import <UIKit/UIKit.h>
@class SimpleTableViewController;
@interface SimpleTableAppDelegate : UIResponder <UIApplicationDelegate>{
IBOutlet SimpleTableViewController *viewController;
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) IBOutlet SimpleTableViewController *viewContrller;
@end
// SimpleTableAppDelegate.m
#import "SimpleTableAppDelegate.h"
#import "SimpleTableViewController.h"//导入所需类的头文件
@implementation SimpleTableAppDelegate
@synthesize window = _window;
@synthesize viewContrller = _viewContrller;//setter和getter,养成在这里加下划线的好习惯吧
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
SimpleTableViewController *simpleTableviewContrller=[[SimpleTableViewControlleralloc]initWithNibName:@"SimpleTableViewController" bundle:nil];//实例视图
_viewContrller=simpleTableviewContrller;
self.window.backgroundColor = [UIColor whiteColor];
self.window.rootViewController=_viewContrller;//把刚才实例的SimpleTableViewController作为根视图
[self.window makeKeyAndVisible];
return YES;
}
……
现在你可以使者运行一下,应该可以看到一个空的表啦。(中间用横线分割了很多段)
3.这里的表是空的,那如何给表添加内容呢?
其实表视图本身就包含了委托和数据源两个协议:UITableViewDelegate, UITableViewDataSource
那我们现在就把这两个协议写给SimpleTableViewController吧。
// SimpleTableViewController.h
#import <UIKit/UIKit.h>
@interface SimpleTableViewController : UIViewController<UITableViewDelegate, UITableViewDataSource>{
NSArray *listData;
}
@property (strong, nonatomic) NSArray *listData;
@end
我们这里使用数组作为表示图的数据源。
// Simple_TableViewController.m
#import "Simple_TableViewController.h"
@implementation Simple_TableViewController
@synthesize listData;
……
//首先实例一个数组作为数据源使用,它应该在视图加载完毕后执行
- (void)viewDidLoad
{
NSArray *array=[[NSArray alloc] initWithObjects:@"Sleepy", @"Sneezy", @"Bashful", @"Happy", @"Grumpy",@"Dopey", @"Thorin", @"Dorin", @"Nori", @"Ori", @"Balin", @"Dwalin", @"Fili", @"Kili", @"Oin", @"Gloin", @"Bofur",@"Bombur", nil];
self.listData=array;
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
表视图从其结构来看,应该遵循表-分区-行这样的结构。这里我们能只创建一个分区,所以不用调用分区的方法(如果多个分区,那可就要调用啦),但是行是一定要说明的。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [self.listData count];//返回一个NsInterger作为行数
}
现在我们已经知道了行数就是我们刚才建立的那个数组的长度。但是我们怎么告诉每一行显示什么内容呢?那就要用到以下的一个方法了,大致的模式如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if(cell==nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:SimpleTableIdentifier];
}
现在已经有行单元了,我们需要对这个行单元的一些属性进行设置,如图片,文本等,最后我们
return cell;
即可。
以我们现在的例子来看,源代码如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if(cell==nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:SimpleTableIdentifier];
}
NSUInteger row = [indexPath row];
cell.textLabel.text = [listData objectAtIndex:row];
return cell;
}
以上这两个方法都是TableViewDataSource协议里的方法。
4.好啦,到这里,你是不是觉得已经完成了呢?那就运行一遍。还是空表,怎么回事呢?嗯,我们定义了表的数据源,但是表视图并不知道我们在哪里定义了啊。所以,我们要告诉表示图其dataSource(即以上两个方法(当然如果还有其他的一些方法))在哪里定义了。这个例子中我们是写在SimpleTableViewController中的,所以,理所当然,我们在SimpleTableViewController.xib中需要把表示图连接到File’s Owner:
具体的操作是按住ctrl同时拖动Table View到File’s Owner两次,分别连接到dataSource和delegate。
现在运行一遍,嗯,可以啦。
5.下面继续介绍TableViewDelegate协议里的方法
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{
return indexPath;
}
@end
这里这个方法是在你点击某个视图单元时表示图用来判断你是否你选中你点击的表图单元。上面这一段你即使不写都可以的,因为默认就是每个表图单元都可以选中的。但是如果你要使某个单元选不中,那就要加点料啦。例如这样:
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSUInteger row = indexPath.row;
if(row == 0)
return nil;
return indexPath;
}
@end
第一个行就选不到咯。
单击某个表视图单元后应该执行一些操作吧,那这些操作该写到哪里呢?那就是接下来这个方法了:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
}
例如,弹出一个警告
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSUInteger row = indexPath.row;
NSString *rowValue = [listData objectAtIndex:row];
NSString *msg = [[NSString alloc]initWithFormat:@"You selected %@", rowValue];
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Row Slected" message:msg delegate:nilcancelButtonTitle:@"Yep, I did" otherButtonTitles: nil];
[alert show];
[tableView deselectRowAtIndexPath:indexPath animated:YES];//在弹出警告后自动取消选中表视图单元
}
在运行一遍,很炫吧,试一下点第一行,你点我不到,哈哈。
////////////////////////////////////////////////////////////////////////////////////////////////////////////
实现输入键盘能够点击任何画面任何一个地方都能关闭
1)在viewcontroller.h添加一个操作
- (IBAction)backgroundTap:(id)sender;
2)在viewcontroller.m实现改操作
-(IBAction)backgroundTap:(id)sender
{
[textfiled resignFirstResponder];
}
3)在IB中,选择view对象按苹果键+4,将其更改为UIController响应各项事件
4)从苹果键+2中选择Touch down事件到File's owner图标,选择backgoundTap操作。
///////////////////////////////////////////////////////////////////////////////////////////////////////
今天看了一下iOS开发中多个视图的应用. iOS下包含了几种不同种类的视图类型和controller:比如Tab Bar ,Navigation Bar ,Tool Bar等.也可以自定义自己的视图的controller 程序中主窗口的视图控制器我们成为root controller,由它负责不同视图的切换等功能. 由root controller负责的视图都有自己的controller和delegate,比如一个tab bar,当用户在tab bar上点击的时候,是由tab bar的controller负责处理,而当用户在内容界面点击的时候,是由内容视图的controller负责处理的. 书中的例子很简单,点击tab bar中的按扭,在两个背景颜色(一蓝一黄)的视图中切换,两个视图中各有一个button 书中的例子建立的步骤如下: 1.建立一个Window base application ,没有view controller,只有一个window 2.添加视图文件 2.1 新建文件,选择cocoa touch下的UIViewController subclass 不使用xib文件(书中这里是xcode4.2以前的版本) 保存为SwitchViewController.h 和 SwitchViewController.m.这就是root controller 2.2 按照步骤2.1,创建蓝,黄背景视图的类文件 BlueViewController & YellowViewController 3.添加xib文件 3.1 选择cocoa touch下user interface下的View XIB的文件 3.2 新建两个视图的xib文件,BlueView.xib & YellowView.xib 4.在AppDelegate中添加一个IBOutlet, @property (nonatomic, retain) IBOutlet SwitchViewController *switchViewController; 5.为了将主视图SwitchViewController和Window关联,需要使用addSubview,添加了以下代码: #import "View_SwitcherAppDelegate.h" 6. 为了切换两个view,我们在SwitchViewController里添加两个View的指针,不定义IBOutlet,同时定义方法switchViews #import <UIKit/UIKit.h>
7.代码架构好了,开始在IB中操作 7.1 在Library中拖动一个View Controller到Window上面 7.2 该View是UIViewController,在Identity Inspector中修改类名为UIViewController 7.3 新建Toolbar的View,拖放一个View到7.1添加的View上面,替换原有的View(注:为何是替换呢?) 7.4 拖动一个Toolbar到7.3新建的View中,选中Toolbar后,点击Button,链接到SwitchViewController的方法switchView中
8. 在IB中将AppDelegate中的IBOutlet switchViewController与类SwitchViewController链接 9. 修改SwitchViewController.m 主要就是从Nib加载ViewController,不用的释放Controller 刚开始只加载BlueView,因为YellowView可能用户不会选择,等到切换的时候才加载(Lazy Loading) #import "SwitchViewController.h" [yellowController release]; - (void)didReceiveMemoryWarning {
- (void)dealloc {
10.完善两个内容视图,添加button,弹出不同的内容提示. #import <UIKit/UIKit.h> 在实现中加入UIAlertView即可.(略去)
打开BlueView.nib,在Indentity Inspector中选择class name为BlueViewController,表明从nib从BlueViewController 然后修改View的背景色,更改View的位置在属性页的 Simulated User Interface Elements选项下
11.加入视图切换动画 - (IBAction)switchViews:(id)sender .....
if(..) { [UIView setAnimationTransition: … … } [UIView commitAnimations]; }
昨天参照书中的例子,回到家后开始实现示例中的代码. 发现XCode4.2中没有Window Base Application这一选项.使用Empty Application没有主界面的Storyboard文件. 于是打开google,发现Jeroen Trappers有一篇文章有详细的解决方法. 地址:http://www.trappers.tk/site/2011/06/16/mainwindow-xib/
我的看法是(不一定准确):AppDelegate是个代理类,起类似与window编程下的WNDPROC函数. 与其配合的是UIApplication. 在没有XIB文件的情况下,是通过程序的方式加载UIApplication的一个实例完成框架的建立的. 为了从XIB文件中加载,我们就要自己创建一个XIB文件,这是首先的问题. 如何将XIB文件和AppDelegate的类关联是下面的问题.
我们知道,AppDelegate需要一个UIApplition实例,这个事例保存所有XIB上元素的拷贝.所以File's Owner的类名我们要改为UIApplicaion 同时UIApplicaion有一个插座IBOutlet刚好是我们AppDelegate可以对接的.类型UIApplicationDelegate 于是我们首先拖放一个Object,修改类名为我们的xAppDelegate,这样就可以将这个Object和UIApplication中的delegate链接了. delegateThe delegate of the application object. @property(nonatomic, assign) id<UIApplicationDelegate> delegate DiscussionThe delegate must adopt the UIApplicationDelegate formal protocol. UIApplication assigns and does not retain the delegate. Availability
Declared InUIApplication.h源文件中有UIWindow的变量 window ,我们需要在上面添加的Object(类名xAppDelegate)里面创建一个Window,然后把变量加上IBOutlet后进行链接. 这样就完成了XIB中AppDelegate和它下面Window的两个对象从XIB到代码之间的链接.
可是此时程序的入口并没有改变,文章中推荐的方式是在工程配置中的Main Interface修改为一个XIB文件名,其实就是在程序中加载XIB文件作为入口. 同样的功能,也许我们在代码中也可以实现.类似与initWithNibName的方法,暂时我没有实现.
还有就是注释掉了一个初始化的函数:- (BOOL) application:didFinishLaunchingWithOptions: 这个方法中的操作是跟我们从XIB加载相冲突的.
通过以上几个步骤,我们就可以从Empty Application中自定义的加载一个XIB文件了. 学习到这里,让我对整个XIB的工作方式和UIApplication的工作原理又有了更深一步的了解. 对于以后的多视图学习非常的有帮助.
以上操作的详细步骤如下,顺便复习一下: 1.创建Empty application,此时项目中只有一个AppDelegate的类 2.新建文件,选择User Interface下的Empty 命名为MainWindow 3.打开新建的MainWindow.xib文件
4.将File's Owner的类名修改为UIApplication 5. 在Library中拖放一个Object到图下的位置 6.将该object的类名修改为文件中AppDelegate的类名(同时还可以给object命名下Label) 7.拖放一个Window到左边 8. 在xAppDelegate的h文件中,给window的属性加上IBOutlet @interface DemoAppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) IBOutlet UIWindow *window;@end
9.将File's Owner 和 拖放的Object按照以下方式连接
10.在项目属性中,把Main Interface修改成你的xib文件名MainWindow 11. 在xAppDelegate.m文件中,将 - (BOOL) application:didFinishLaunchingWithOptions:
这个方法全部注释掉 |
发表评论
-
2013学习
2013-02-18 17:23 9152013-2-18 http://developer.a ... -
xcode下控制台中文乱码
2013-01-08 12:20 3024http://blog.csdn.net/ydj213/art ... -
cocos2d game +ios5 之蜘蛛
2012-10-12 11:04 1134http://tobia.github.com/CrossSl ... -
Box2d基本知识
2012-08-31 17:39 623http://www.ohcoder.com/post/201 ... -
转objective-c 中随机数的用法 (3种:arc4random() 、random()、CCRANDOM_0_1() )
2012-08-08 11:22 848http://map.baidu.com/?qt=inf&am ... -
cocos2d游戏开发思路
2012-06-29 16:44 02012-6-29 游戏level的实现有2种思路一种 ... -
下载列表
2012-06-20 09:53 617写进去心里的那些话----- 当被别人忽略、冷落的时 ... -
cocos2d game +ios5
2012-06-19 16:41 1464http://bsr1983.iteye.com/blog/1 ... -
[转载]转载 【IOS】Object-C 中的Selector 概念 (2012-01-10 16:37:55)
2012-06-19 16:01 730原文地址:转载 【IOS】Object-C 中的Sel ... -
object-C
2012-06-19 16:40 11921.@class用在循环嵌入#impo ... -
xcode4.3秘笈
2012-05-22 11:35 5621.It's just slightly different ... -
ios面试题收集
2012-04-09 14:43 2442objective-c学习网页 ht ... -
CCScene,CCLayer,CCSprite,CCNode
2012-04-05 16:22 846http://blog.csdn.net/porsch ... -
objective-c多参数解析和@class声明的作用
2012-03-30 09:37 2340Objective-C 多参数成员函数 ... -
cocos2d做游戏之一入门
2012-03-28 10:37 1486有的时候发现做一件事 ... -
xcode4.2下创建MainWindow
2012-03-28 09:41 9581、创建Empty Application工程;注意创建时的C ... -
iphone下的导航视图
2012-03-19 16:05 1353UINavigationController的特点 ... -
iphone下的多视图 --xcode3.1实现
2012-03-16 11:27 1784苹果电脑os是Mac os 而ipon ... -
xcode4.2里自定义viewController和view切换
2012-03-03 22:59 26381)添加自定义 viewController 在新版的v ... -
iphone中的触摸手势判断,滑动,单击,双击
2012-03-06 09:48 2972/////////////////////////////// ...
相关推荐
标题“一个tableview很好的例子”表明我们将探讨一个关于如何有效地使用UITableView的示例。描述中提到这个例子非常适合初学者,意味着我们将深入浅出地讲解其基本概念和实现方式。 UITableView主要由两大部分组成...
本实例“一个简单的TableView”将引导我们了解如何利用Interface Builder(XIb)来实现TableView的基础功能。 首先,我们需要了解UITableView的基本构成。TableView由两部分组成:DataSource和Delegate。DataSource...
在一个View中显示两个tableView,要求使用statedictionary.plist中的数据,其中key作为左边的数据,每点击一个key,在右边的tableView中显示对应的号码列表,并且左边的tableView,前5行为一个分区(title显示top)...
"tableView demo"这个项目就是一个专门演示如何在iOS应用中使用TableView的实例。在这个demo中,开发者实现了两种不同风格的单元格(cell):一种是按钮式,另一种是导航式。这两种风格的cell为用户提供了不同的交互...
如果我们需要在一个TableView内实现横向滚动,通常会在TableView的每个Cell内部嵌套一个ScrollView。这样,每个Cell可以承载一个横向滚动的内容区域。在实现这个功能时,需要注意Cell内部ScrollView的代理设置和...
这个"ios tableview"的实例源代码,名为"SWTableViewSelectionDemo-master",很显然是一个关于UITableView选择功能的演示项目。下面我们将深入探讨UITableView及其选择功能的相关知识点。 首先,UITableView是一个...
这种效果使得用户可以通过上下两个TableView的选择互动,来过滤或显示特定的数据内容。以下是对这个知识点的详细解释: 1. **联动原理**: 联动tableView的基本原理是通过一个tableView的选择改变另一个tableView...
在iOS开发中,实现左右两个TableView的联动效果是一种常见的交互设计,主要用于展示并联的数据或者进行筛选操作。本文将详细讲解如何实现标题所描述的"ios-简单的实现左右tableview联动,右tableview可左右滑动"的...
1. **创建数据模型**:首先,定义一个数据模型类,包含两个字段,一个表示分组标题,另一个表示该分组下的子项列表。例如: ```java public class GroupData { public String groupTitle; public List<ItemData>...
本教程将深入探讨如何实现“tableView Header头拉伸”以及“导航条隐藏功能”,这两个特性能够显著提升用户体验。 首先,让我们讨论“tableView Header拉伸”这一功能。在用户向下滚动UITableView时,如果我们希望...
在Swift中,UITableViewDataSource和UITableViewDelegate是两个关键协议,它们定义了表格视图的行为和内容。你需要实现这些协议的方法以提供单元格的数据和交互逻辑。例如: ```swift extension ViewController: ...
6. **State Management**:如果你的项目使用了MVVM(Model-View-ViewModel)或其他状态管理框架,如Redux或MobX,那么你可以通过改变ViewModel中的状态来同步两个表格视图的显示。 7. **UI Updates**:在更新数据源...
3、可单独设置上面两个功能的可用性(可以只实现上面任意一个或者两个功能,亦或者两者都不实现)。 使用方法:直接在要用到相应TableView的页面,把UITableView换成例子中的HXLRefreshTableView,分别设置下拉刷新...
下面将详细讲解这两个组件的使用及其相关知识点。 `QTableWidget`是Qt Widgets模块中的一个类,它提供了一个完整的表格控件,包括行、列和单元格的完整交互功能。`QTableWidget`易于使用,因为它提供了丰富的API来...
TableView的数据源是通过DataSource协议来实现的,它要求实现两个主要方法:`numberOfSectionsInTableView:` 和 `tableView:numberOfRowsInSection:`,分别用来返回TableView的节数和每节的行数。 在“我的第一个...
`UITableView`是由行(`UITableViewCell`)组成的视图,每行可以包含一个或多个视图元素,如文本标签、图片或者开关。`UITableView`有两种类型的单元格:普通单元格(`UITableViewCell`)和分组头单元格(`...
本示例中的"ios-tableView滑动header放大的效果.zip"文件提供了一个实现UITableView滚动时头部视图(header view)放大效果的示例,这在OC(Objective-C)和Swift两种编程语言中都有实现。这种效果通常用于展示一些...
在`ios-tableview镶套collection view.zip`这个压缩包中,包含了一个名为`CityDemo`的示例项目,它展示了如何在 `UITableView` 的每个单元格内实现一个 `UICollectionView`。以下将详细介绍这种嵌套结构的相关知识点...
这个“ios-TableView delegate dataSource封装.zip”文件显然提供了一个关于如何封装这两个协议的方法,以便在多个UITableView实例中重用代码,避免了每次创建新的表格视图时都需要手动复制和粘贴相同的数据源和代理...
例如,可以创建一个名为`CustomTwoColumnCell`的类,并在.xib文件中设计界面,设置两个UILabel并左右对齐。 步骤2:注册UITableViewCell 在你的UIViewController中,你需要注册自定义的UITableViewCell类,这可以...