iPhone开发基础知识.docx
- 文档编号:9217991
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:24
- 大小:43.95KB
iPhone开发基础知识.docx
《iPhone开发基础知识.docx》由会员分享,可在线阅读,更多相关《iPhone开发基础知识.docx(24页珍藏版)》请在冰点文库上搜索。
iPhone开发基础知识
一.基本知识
和UINavigationController类似,UITabBarController也可以用来控制多个页面导航,用户可以在多个视图控制器之间移动,并可以定制屏幕底部的选项卡栏。
借助屏幕底部的选项卡栏,UITabBarController不必像UINavigationController那样以栈的方式推入和推出视图,而是组建一系列的控制器(他们各自可以是UIViewController,UINavigationController,UITableViewController或任何其他种类的视图控制器),并将它们添加到选项卡栏,使每个选项卡对应一个视图控制器。
二.具体介绍
1.通过代码的方式创建UITabBarController界面
代码的位置应该放在xxxAppDelegate.m中的applicationDidFinishLaunching:
方法中,因为TabBarController通常是为应用窗口提供根视图,所以需要在程序启动后,窗口显示前创建TabBarController。
具体创建步骤为:
(1)创建一个新的UITabBarController对象
(2)为每一个Tab创建一个rootviewcontroller
(3)把这些rootviewcontrollers添加到一个array中,再把这个array分配给tabbarcontroller的viewControllers属性
(4)把tabbarcontroller'sview添加到应用程序主窗口
例子:
-(void)applicationDidFinishLaunching:
(UIApplication*)application{
tabBarController=[[UITabBarControlleralloc]init];
MyViewController*vc1=[[MyViewControlleralloc]init];
MyOtherViewController*vc2=[[MyOtherViewControlleralloc]init];
NSArray*controllers=[NSArrayarrayWithObjects:
vc1,vc2,nil];
tabBarController.viewControllers=controllers;
//Addthetabbarcontroller'scurrentviewasasubviewofthewindow
[windowaddSubview:
tabBarController.view];
}
2.通过代码的方式创建TabBarItem
TabBarController的每个选项卡都得有一个UITabBarItem,可以在其rootviewcontroller初始化时创建并添加UITabBarItem。
例子:
-(id)init{
if(self=[superinitWithNibName:
@"MyViewController"bundle:
nil]){
self.title=@"MyViewController";
UIImage*anImage=[UIImageimageNamed:
@"MyViewControllerImage.png"];
UITabBarItem*theItem=[[UITabBarItemalloc]initWithTitle:
@"Home"image:
anImagetag:
0];
self.tabBarItem=theItem;
[theItemrelease];
}
returnself;
}
..UITabBarController学习笔记
一.基本知识
和通讯录中联系人相关的应用iPhone提供了两个框架:
AddressBook.framework和AddressBookUI.framework,使用这两个框架我们可以在程序中访问并显示iPhone数据库中的联系人信息。
二.具体介绍
1.AddressBookUI显示部分
AddressBookUI中提供了和联系人显示信息相关的一些Controller,有四个:
ABPeoplePickerNavigationController:
显示整个通讯录并可以选择一个联系人的信息
ABPersonViewController:
显示一个具体联系人的信息
ABNewPersonViewController:
增加一个新的联系人
ABUnknownPersonViewController:
完善一个联系人的信息
由于其中最主要的是ABPeoplePickerNavigationController,因此就具体的介绍一下通过程序显示整个通讯录并且可以选择其中某个联系人信息的步骤。
(a)创建并初始化一个ABPeoplePickerNavigationController对象
(b)设置其代理(delegate)
(c)用presentModalViewController:
animated:
这个方法进行显示整个通讯录页面
例子:
-(IBAction)showPicker:
(id)sender{
ABPeoplePickerNavigationController*picker=
[[ABPeoplePickerNavigationControlleralloc]init];
picker.peoplePickerDelegate=self;
[selfpresentModalViewController:
pickeranimated:
YES];
[pickerrelease];
}
ABPeoplePickerNavigationControllerDelegate的方法介绍
(a)peoplePickerNavigationControllerDidCancel:
当用户选择取消时调用这个方法,可以在这个方法里取消整个通讯录页面的显示。
(b)peoplePickerNavigationController:
shouldContinueAfterSelectingPerson:
当用户选择了通讯录中某一个联系人时调用这个方法,可以在这里获取联系人的信息。
如果希望可以继续显示这个联系人更具体的信息,则returnYES。
否则取消整个通讯录页面的显示并returnNO。
(c)peoplePickerNavigationController:
shouldContinueAfterSelectingPerson:
property:
identifier:
如果上一个方法返回的是YES,则会显示某一个联系人信息,如果选择了联系人的某一项纪录,就会调用这个方法,可以通过点击选择联系人的某一项信息。
如果希望可以对选择的某一项纪录进行进一步操作,比如直接拨打电话或调用邮箱发送邮件,则returnYES。
否则取消整个通讯录页面的显示并returnNO。
例子:
-(void)peoplePickerNavigationControllerDidCancel:
(ABPeoplePickerNavigationController*)peoplePicker{
//assigningcontrolbacktothemaincontroller
[pickerdismissModalViewControllerAnimated:
YES];
}
-(BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController*)peoplePickershouldContinueAfterSelectingPerson:
(ABRecordRef)person{
//获取联系人姓名
name.text=(NSString*)ABRecordCopyCompositeName(person);
//获取联系人电话
ABMutableMultiValueRefphoneMulti=ABRecordCopyValue(person,kABPersonPhoneProperty);
NSMutableArray*phones=[[NSMutableArrayalloc]init];
inti;
for(i=0;i NSString*aPhone=[(NSString*)ABMultiValueCopyValueAtIndex(phoneMulti,i)autorelease]; NSString*aLabel=[(NSString*)ABMultiValueCopyLabelAtIndex(phoneMulti,i)autorelease]; NSLog(@"PhoneLabel: %@Phone#: %@",aLabel,aPhone); if([aLabelisEqualToString: @"_$! $_"]) { [phonesaddObject: aPhone]; } } phoneNo.text=@""; if([phonescount]>0) { NSString*mobileNo=[phonesobjectAtIndex: 0]; phoneNo.text=mobileNo; //NSLog(mobileNo); } //获取联系人邮箱 ABMutableMultiValueRefemailMulti=ABRecordCopyValue(person,kABPersonEmailProperty); NSMutableArray*emails=[[NSMutableArrayalloc]init]; for(i=0;i { NSString*emailAdress=[(NSString*)ABMultiValueCopyValueAtIndex(emailMulti,i)autorelease]; [emailsaddObject: emailAdress]; } email.text=@""; if([emailscount]>0) { NSString*emailFirst=[emailsobjectAtIndex: 0]; email.text=emailFirst; //NSLog(emailFirst); } [peoplePickerdismissModalViewControllerAnimated: YES]; returnNO; } -(BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController*)peoplePicker shouldContinueAfterSelectingPerson: (ABRecordRef)person property: (ABPropertyID)property identifier: (ABMultiValueIdentifier)identifier{ returnNO; } 2.AddressBook部分 AddressBook框架部分主要是记录联系人的各个信息,ABRecordRef类型的记录既可以代表单个人(kABPersonType),也可以是一个集合(kABGroupType)。 通讯录中联系人的各个属性有两种形式,单值属性和多值属性。 单值属性对应的只有一个值,比如联系人的姓名;多值属性对应的可能有多个值,比如联系人有多个电话号码等。 (a)常用方法 CFTypeRefABRecordCopyValue( ABRecordRefrecord, ABPropertyIDproperty ); 从一个记录中获取某个属性对应的值 (b)单值属性对应的方法 CFStringRefABRecordCopyCompositeName( ABRecordRefrecord ); 获取联系人完整的姓名。 (c)多值属性对应的方法 CFTypeRefABMultiValueCopyValueAtIndex( ABMultiValueRefmultiValue, CFIndexindex ); 返回对应位置处的属性值 CFStringRefABMultiValueCopyLabelAtIndex( ABMultiValueRefmultiValue, CFIndexindex ); 返回对应位置处的属性标识 CFArrayRefABMultiValueCopyArrayOfAllValues( ABMultiValueRefmultiValue ); 返回包含所有属性值的数组 CFIndexABMultiValueGetCount( ABMultiValueRefmultiValue ); 返回属性值的个数 例子: //获取联系人姓名 name.text=(NSString*)ABRecordCopyCompositeName(person); //获取联系人电话 ABMutableMultiValueRefphoneMulti=ABRecordCopyValue(person,kABPersonPhoneProperty); NSMutableArray*phones=[[NSMutableArrayalloc]init]; inti; for(i=0;i NSString*aPhone=[(NSString*)ABMultiValueCopyValueAtIndex(phoneMulti,i)autorelease]; NSString*aLabel=[(NSString*)ABMultiValueCopyLabelAtIndex(phoneMulti,i)autorelease]; NSLog(@"PhoneLabel: %@Phone#: %@",aLabel,aPhone); if([aLabelisEqualToString: @"_$! $_"]) { [phonesaddObject: aPhone]; } } ..Objective-C学习文档 一.数据类型 1.NSRange typedefstruct_NSRange{ NSUIntegerlocation; NSUIntegerlength; }NSRange; 2.NSPoint,NSSize,NSRect 3.NSString 方法1: (类方法)stringWithFormat[NSStringstringWithFormat: @""] 方法2: length 方法3: isEqualToString[实例名1isEqualToString: 实例名2] 方法4: compare可以带参数 方法5: hasPrefixhasSuffix 4.NSMutableString 方法1: (类方法)stringWithCapacity[NSMutableStringstringWithCapacity: 表示大小的数字] 方法2: appendStringappendFormat 方法3: deleteCharactersInRangerangeOfString 5.NSArray 方法1: (类方法)arrayWithObject逗号分隔,以nil结束 方法2: countobjectAtIndex 6.NSMutableArray 方法1: (类方法)arrayWithCapacity 方法2: addObjectremoveObjectAtIndex 7.NSEnumerator 方法1: objectEnumeratorreverseObjectEnumerator 方法2: nextObject 8.NSDictionary 方法1: (类方法)dictionaryWithObjectsAndKeys接收对象和关键字交替的存储的系列,以nil结束 方法2: objectForkey 9.NSMutableDictionary 方法1: (类方法)dictionaryWithCapacity 方法2: setObject: forKey: removeObjectForKey 10.NSNumber 用来把基本数据类型包装成对象的形式 11.NSValue 可以包装任意值 12.NSNull [NSNullnull]表示空 二.内存管理 1.Cocoa内存管理规则 (1)当你使用new、alloc或copy方法创建一个对象时,该对象的保留计数器值为1。 当不再使用该对象时,你要负责向该对象发送一条release或autorelease消息(用完后或者在dealloc方法中进行统一释放)。 这样,该对象将在其使用寿命结束时被销毁。 (2)当你通过任何其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,因此就不需要执行任何操作来确保该对象被清理。 自动释放池: NSAutoreleasePool*pool; pool=[[NSAutoreleasePoolalloc]init]; [poolrelease]; 如果你打算在一段时间内拥有该对象(使用retain方法),则需保留它并确保在操作完成时释放它(用完后或者在dealloc方法中进行统一释放)。 (3)如果你保留了某个对象,则需要(最终)释放或自动释放该对象。 必须保持retain方法和release方法的使用次数相等。 注: 简单来说,如果使用了alloc,new或copy方法获得一个对象,则必须进行释放该对象操作。 三.对象初始化 1.基本知识 (1)Objective-C创建对象有两种方法: [类名new]: 直接new一个新对象 [[类名alloc]init]: 先为对象分配内存空间,再为其初始化 (2)在Cocoa中,对象分配和初始化是两个分离的操作: 来自NSObject的类方法alloce为对象分配一块内存并将其清0;实例方法init用于获得一个对象并使其运行 2.便利初始化函数 一个类中有的多个初始化函数,即多个以init开头的方法。 3.指定初始化函数 类中的某个初始化方法被指派为指定初始化函数,该类的所有初始化方法使用指定初始化函数执行初始化操作。 子类使用其超类的指定初始化函数实现超类的初始化。 四.特性(property) 1.基础知识 特性的预编译指令为@property,作用是自动声明属性的setter和getter方法,因此就不必再有为每个属性都写的访问器方法而产生的冗长代码了。 即使用预编译指令@property通知编译器为对象的属性的setter和getter自动生成方法声明。 同时使用@synthesis预编译指令通知编译器生成对应的访问器方法。 2.格式 在.H文件中声明: @property类型变量名; 在.M文件中实现: @synthesis变量名; 3.相关的点语法 访问属性的setter和getter方法有两种方式: (1)[对象属性方法]: Objective-C特有的正规的[]方式 (2)对象.属性方法: 和其他语言类似的.方式 4.特行扩展 在特性的声明里可以指定属性的一些要求,比如copy,retain,nonatomic,readwrite(默认),readonly等,方式为比如 @property(retain,nonatomic)类型变量; 五.类别 1.基本知识 类别是为现有的类添加新方法的方式 2.格式 (1)声明: @interface类名(类别名) 方法列表 @end (2)实现: @implementation类名(类别名) 方法实现部分 @end 3.类别局限性 (1)类别只能添加新方法,无法添加新的实例变量 (2)如果类别名和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级 4.类别的作用 通过类别的方式,可以将类的实现分散到不同的文件里。 六.协议 1.基本知识 Objective-C的协议类似Java里的接口概念 2.格式 (1)声明: @Protocol协议名称 方法声明列表 @end (2)对象采用协议: 在@interface类声明的后面添加<协议名称> @interface类名<协议名称> (3)对象实现协议: 在@implementation里实现协议的方法 @implementation类名 实现协议的方法 @end 3.Objective-C2.0中协议的新特性 (1)@optional预编译指令: 表示可以选择实现的方法 (2)@required预编译指令: 表示必须强制实现的方法 ..半翻页动画效果例子 iPhone中的页面间切换动画效果比较漂亮,今天 学习了下其中一个类似翻页的动画效果,并经过修改做成 类似地图卷起一角的那种形式。 附一张截图: ..iPhone学习文档_快捷键 一.常用快捷键 1.Xcode部分: win+N: 新建文件 win+shift+N: 新建工程 win+O: 打开工程或文件 win+S: 保存 win+shift+S: 另存为 win+Z: 撤销一步 win+W: 关闭工程 win+Q: 推出Xcode win+B: 编译项目 win+R: 编译并运行 win+shift+B: 查看编译结果 win+Y: 编译并调试 win+Alt+R: 运行 win+Alt+Y: 调试 win+shift+R: 查看运行结果 win+shift+E: 扩展或压缩编辑器窗口 win+[: 左移代码块 win+];右移代码块 Tab: 接受代码提示 Esc: 显示代码提示菜单 Ctrl+/: 移动到代码提示的下一个占位符 win+Alt+向上箭头: 在.h和.m文件间切换 2.InterfaceBuild(IB)部分: win+shift+L: 打开库(Library)面板窗口 win+shift+I: 打开检查器(Inspector)面板窗口 win+1到7: 可以直接打开检查器窗口包含的属性(attributes),效果(effect),大小(size),绑定(binging),连接(connecting),指示(identify),苹果脚本(applescript)等子窗口 win+R: 仿真构造的界面 win+shift+R: 编译界面部分并回到Xcode 3.iPhone模拟器部分: Win+H: 隐藏模拟器 Win+Alt+H: 隐藏其他,只剩模拟器界面 W
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- iPhone 开发 基础知识