- 浏览: 261524 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
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 8672013-2-18 http://developer.a ... -
xcode下控制台中文乱码
2013-01-08 12:20 2981http://blog.csdn.net/ydj213/art ... -
cocos2d game +ios5 之蜘蛛
2012-10-12 11:04 1091http://tobia.github.com/CrossSl ... -
Box2d基本知识
2012-08-31 17:39 589http://www.ohcoder.com/post/201 ... -
转objective-c 中随机数的用法 (3种:arc4random() 、random()、CCRANDOM_0_1() )
2012-08-08 11:22 806http://map.baidu.com/?qt=inf&am ... -
cocos2d游戏开发思路
2012-06-29 16:44 02012-6-29 游戏level的实现有2种思路一种 ... -
下载列表
2012-06-20 09:53 593写进去心里的那些话----- 当被别人忽略、冷落的时 ... -
cocos2d game +ios5
2012-06-19 16:41 1418http://bsr1983.iteye.com/blog/1 ... -
[转载]转载 【IOS】Object-C 中的Selector 概念 (2012-01-10 16:37:55)
2012-06-19 16:01 694原文地址:转载 【IOS】Object-C 中的Sel ... -
object-C
2012-06-19 16:40 11551.@class用在循环嵌入#impo ... -
xcode4.3秘笈
2012-05-22 11:35 5171.It's just slightly different ... -
ios面试题收集
2012-04-09 14:43 2405objective-c学习网页 ht ... -
CCScene,CCLayer,CCSprite,CCNode
2012-04-05 16:22 804http://blog.csdn.net/porsch ... -
objective-c多参数解析和@class声明的作用
2012-03-30 09:37 2271Objective-C 多参数成员函数 ... -
cocos2d做游戏之一入门
2012-03-28 10:37 1403有的时候发现做一件事 ... -
xcode4.2下创建MainWindow
2012-03-28 09:41 9261、创建Empty Application工程;注意创建时的C ... -
iphone下的导航视图
2012-03-19 16:05 1322UINavigationController的特点 ... -
iphone下的多视图 --xcode3.1实现
2012-03-16 11:27 1740苹果电脑os是Mac os 而ipon ... -
xcode4.2里自定义viewController和view切换
2012-03-03 22:59 26041)添加自定义 viewController 在新版的v ... -
iphone中的触摸手势判断,滑动,单击,双击
2012-03-06 09:48 2933/////////////////////////////// ...
相关推荐
在一个View中显示两个tableView,要求使用statedictionary.plist中的数据,其中key作为左边的数据,每点击一个key,在右边的tableView中显示对应的号码列表,并且左边的tableView,前5行为一个分区(title显示top)...
3、可单独设置上面两个功能的可用性(可以只实现上面任意一个或者两个功能,亦或者两者都不实现)。 使用方法:直接在要用到相应TableView的页面,把UITableView换成例子中的HXLRefreshTableView,分别设置下拉刷新...
一个iOS上table view的demo,实现两种风格的cell, 分别是按钮式的和导航式的. 可以结合我的博文一起分析: http://blog.csdn.net/pony_maggie
在一个View中显示两个tableView,要求使用statedictionary.plist中的数据,其中key作为左边的数据,每点击一个key,在右边的tableView中显示对应的号码列表,并且左边的tableView,前5行为一个分区(title显示top)...
本程序包括两个范例。 1。tableView的基本用法。 2。Navigation Table View的用法,包括searchBar的用法 全部源代码都是本人在Mac上测试通过。
在同一个tableview里实现不同种类的cell,一般有两种方法,一种是把所有种类的cell先注册了,再根据不同的identifer去加载cell,一种是在init时创建不同的identifer的cell。 效果图如下: 准备工作 创建一个基类的...
最好用一个tableview实现。一个tableview不够用了再嵌套,适用复杂场景。 首先我说下不适用的,免得大家浪费时间。 1.不适用上下拉刷新加载更多的页面。 2.不适用点击cell获取点击事件的页面,可以加入button点击...
首先看一下最终的效果,在tableViewController上添加一个悬浮按钮,该按钮不能随着视图的滚动而滚动 首先介绍上面的第一种方法: 1)创建tableview和底部按钮的属性 //屏幕宽 #define kScreenW [UIScreen ...
由于文章内容的限制,我们接着在上文的内容展开,上文的方案中还是存在一个问题的,如果我们展开了多个section,并且展开的section不在屏幕上面,当我们滑动的时候,section再次回到屏幕的时候,展开的图标就不是再...
截屏特征分开的飞行旅程分为两个部分,取决于网络有一个默认的加载动画(只需更改天空的颜色) 刷新完成后会显示默认的粒子动画,以指示加载已完成,您可以使用自己的实现来替换它。如何使用添加刷新视图: ...
本文实例为大家分享了iOS ...开始以为是加在里面的视图变大,而TableViewHeardView没变大,我NSLog打印了一下两个视图的高度,发现是一样的,找不到问题了。 在网上找了一些相关的例子,各有各的做法,有的是根据偏
先看看效果图: 一.整体布局 1.... 2.... 2.1交给两个控制器管理比较麻烦,点击一个控制器需要通知另外一个控制器 2.... 两个tableView设置同一个控制器为数据源和代理,实现方法的时候要先判断tabl
1.自定义了一个表格View(TcTableView),支持继承重载相关虚函数, 2.TcTabelView支持设置多行横向表头(默认2行), 3.可以添加多张表格,每个表格是独立的,它们都有属于自己的自定义表头。 4.表头的右键操作我是自己写...
目前项目包含下列弹框:(及代码思路) ...7.提示框由小变大弹出(弹出区域放一张显示图片,尾部带两个自定义按钮) 8.弹出侧滑视图(侧滑视图带tableView点击跳转) 9.剩下的几个是对系统AlertView封装后弹出的效果
这是一个具备常规功能并方便改造的购物车模型 一共包含五个模块: * `GBShopcartViewController`: 购物车控制器 负责协调Model和View 只有100多行代码 * `GBShopcartFormat`: 负责网络请求与逻辑处理 * `...
//判断两个字符串是否相等,不能使用==,使用等号是判断两个对象是否是一个对象,也就是是否是一个内存地址。 //判断字符串的内容是否相同应该使用nsstring的isEqualToString:方法 //在低版本的时候,如果直接点击...
1.tableView是一个用户可以滚动的多行单列列表,在表视图中,每一行都是一个UITableViewCell对象,表视图有两种风格可选 代码如下: typedef NS_ENUM(NSInteger, UITableViewStyle) { UITableViewStylePlain, /...
在iOS7之后,开发者可以自定制转场动画,但是本人在开发过程中一直要兼容iOS6,因此也没能在项目中使用到...pop有两个动画效果:一个是通过tableView滑动到一定位置时开始pop的转场动画,一个是直接点击navigatioBar上的
自定义 cell 并使用 Auto Layout 创建文件 我们可以一次性创建 xib 文件和类的代码文件。 新建 Cocoa Touch Class: ...新建一个 Table View Controller 页面,并把我们之前创建的 Swift on iOS 那个
(如果想要设置对比view那就要写两个数组) 6.然后为cell的两个成员变量传值 cell.scores = mScoreArray; cell.compareScores = mCompareArray; (现在就默认了主要分数是桔色,对比分数是绿色,后续会把颜色的...