




免费预览已结束,剩余48页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
iOS开发指南自学笔记第一章 概述1、 iOS的系统架构分为4层(提供的框架及其前缀请参看P30):a) Cocoa Touch层:提供了构建iOS应用的一些基本系统服务和关键框架,如多任务、触摸和推送等。b) Media层:提供了图形、音频、视频和AirPlay技术。c) Core Services层:提供了iCloud、应用内购买、SQLite数据库和XML支持。d) Core OS层:底层服务,开发中一般不会调用。2、 iOS的功能a) 多点触摸和手势:触击、双击、滑动、长时间触击、轻拂、刷屏和手指合拢张开等。b) 统一的屏幕尺寸(4套):iPhone和iPod是3.5英寸,iPhone5和第5代iPod是4英寸,iPad是9.7英寸,iPad mini是7.9英寸。c) 高分辨率(像素):iPhone4S的屏幕分辨率是960*640,iPhone5和第5代iPod分辨率是1136*640,第1、2代iPad是1024*768,第3代iPad采用了视网膜屏幕技术,分辨率是2048*1536,iPad mini是1024*768。d) Xcode中IB屏幕尺寸以点为单位。在视网膜屏幕技术中,1个点包括了4个像素,否则1点就是1个像素。e) 一些固定尺寸的屏幕布局:状态栏占20点,导航栏或工具栏占44点,标签栏占49点。f) iOS7新特性:从拟物化转为扁平化,强调简约、抽象、半透明和精致的视觉感受。g) 64位支持:iPhone5S、iPad mini2、iPad Air。采用了64位A7 CPU,使用ARM V8架构,另外增加了寄存器的数量,是A6的两倍,大大提高了程序的运行速度。在Xcode5中选择CPU架构,其中的Standard architectures (including 64-bit)即采用64位架构。另外需选择iOS Deployment Target版本为7.0。3、 Xcode中的工程模板a) Master-Detail Application:树形结构的导航应用,含导航控制器和表视图控制器。b) Page-Based Application:类似电子书效果的应用,是一种平铺导航。c) Single View Application:单视图应用。d) Tabbed Application:标签导航模式应用,含标签控制器和标签栏。e) Utility Application:构建实用型应用程序,含主视图和子视图控制器。在iPhone中子视图以模态方式呈现,iPad中以浮动窗口(popover)的形式呈现。f) Framework & Library:构建基于Cocoa Touch的静态库,生成libXXX.a的文件。g) Other:构建应用内购买内容包或空工程。h) 文件夹和组的区别:文件夹是灰色,在访问路径里要有路径,如image/icon.png;组是黄色,访问资源时不需要路径,直接写文件名即可。i) Project和Target:一个工程只有一个Project,可以有多个Target。通过File=New=Target增加一个新的Target。要指定运行哪一个Target,可以通过选择不同的Scheme来实现。4、 应用框架分析a) 导航视图中有四个组,除了主项目文件组,还包括XXXTests单元测试组,Frameworks组(放置项目依赖的框架和库),Products组(放置编译后的工程产品包)。b) 主项目组中的Supporting Files组,包含4个文件:l XXX-Info.plist:工程属性描述文件l InfoPlist.strings:本地化的字符串文件l main.m:应用程序的入口文件,其中只有一个主函数mainint main(int argc, char * argv) autoreleasepool return UIApplicationMain(argc, argv, nil, NSStringFromClass(AppDelegate class);l XXX-Prefix.pch:可在此文件中引入一些头文件,其他文件就不必再引入了。c) 主项目组中的Images.xcassets文件夹,可以放置工程中的图片。d) 主项目组含有两个类:AppDelegate和ViewController。调用顺序:main.m模块中的main函数进行AppDelegate的实例化(回调didFinishLaunchingWithOptions),然后实例化ViewController。5、 故事板:用于描述应用中的界面、控件及其事件,以及界面之间是如何导航的。a) Scene(场景):每个视图控制器都会对应一个Scene,可理解为一个界面或屏幕,在这个屏幕中有很多视图和控件,相当于一个xib。这些Scene之间通过Segue连接。b) Segue:Scene之间的连线,不但定义了Scene之间的跳转,还体现了他们之间的关系。c) 跳转类型:Push(树形导航)、Modal(模态导航)、Popover(浮动窗口)和自定义方式。6、 应用的5种状态a) Not Running(非运行状态):应用没有运行或被系统终止。b) Inactive(前台非活动状态):应用正在进入前台状态,但是还不能接受事件处理。c) Active(前台活动状态):能够接受事件处理。d) Background(后台状态):如果有可执行的代码则执行,否则马上进入挂起状态。是否能够进入后台状态,可以在Info.plist中设置Application does not run in background属性,对应UIApplicationExistsOnSuspend。e) Suspended(挂起状态):进入一种“冷冻”的状态,不能执行代码。如果系统内存不够,应用会被终止。7、 应用生命周期与应用场景a) 点击图标启动:Not Running=Inactive=Active,第一阶段调用didFinishLaunchingWithOptions方法,第二阶段调用applicationDidBecomeActive方法。b) 点击Home键退出应用(可以后台运行,不会退出应用):Active=Inactive=Background=Suspended,第一个阶段调用applicationWillResignActive方法,第三个阶段调用applicationDidEnterBackground方法。c) 点击Home键退出应用(应用不可以后台运行,点击Home键后会中断并退出应用):Active=Inactive=Background=Suspended=Not Running,在第四个阶段调用applicationWillTerminate方法。d) 挂起重新运行:Suspended=Background=Inactive=Active,第二个阶段调用applicationWillEnterForeground方法,第三个阶段调用applicationDidBecomeActive方法。e) 内存清除-应用终止场景(挂起的应用在低内存时会被终止运行):Background=Suspended=Not Running,在此场景下,应用不会调用任何方法,也不会发出任何通知。8、 视图生命周期及其调用方法ViewDidLoad方法在应用运行的时候只调用一次,其余方法可以反复调用。在iOS6之后不再调用ViewDidUnload方法,仅支持didReceiveMemoryWarning方法。9、 例程:UI状态的保存和恢复:当应用退出或被终止运行时,需要保存当前界面状态,以便再次进入时恢复。a) Scene中选中View Controller,打开右边的标识检查器,设置Restoration ID(恢复标识)为ViewControllerb) AppDelegate中增加代码:-(BOOL) application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder return YES; /应用退出时调用,是否保存状态-(BOOL) application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder return YES; /应用启动时调用,是否恢复上次保存的状态- (void)application:(UIApplication *)application willEncodeRestorableStateWithCoder:(NSCoder *)coder coder encodeFloat:2.0 forKey:Version; /保存时调用,- (void)application:(UIApplication *)application didDecodeRestorableStateWithCoder:(NSCoder *)coder float lastVer = coder decodeFloatForKey:Version; /恢复时调用c) ViewController中增加代码(iOS6之后添加的新方法):-(void)encodeRestorableStateWithCoder:(NSCoder *)coder /保存时调用 super encodeRestorableStateWithCoder:coder; coder encodeObject:self.txtField.text forKey:kSaveKey; /按指定的键保存控件内容-(void)decodeRestorableStateWithCoder:(NSCoder *)coder /恢复时调用 super decodeRestorableStateWithCoder:coder; self.txtField.text = coder decodeObjectForKey:kSaveKey; /恢复控件内容10、 定时器代码:定义:property(nonatomic,strong) NSTimer *myTimer;使用:myTimer = NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:selector(func) userInfo:nil repeats:YES;停止:myTimer invalidate;11、 iOS7中的文字排版和渲染引擎:a) 通过Text Kit可以对文字进行存储、布局以及更加准确的排版方式,例如调整字距、行距、文字大小、指定字体、文字分栏或分页、富文本编辑、自定义文字截断、支持文字的折叠和着色、凸版印刷效果等处理。隶属于UIKit框架,包含了文字排版的相关类和协议。b) 在iOS7之前使用Core Text技术,是面向底层的文字排版和渲染技术,如果需要将文本内容直接渲染到图形上下文时,从性能角度来看选择Core Text,但从易用性角度考虑使用Text Kit是最好的选择。c) Text Kit是基于Core Text构建的,通过Core Text与Core Graphics进行交互。文本控件,如UILabel、UITextField和UITextView则构建于Text Kit之上,即这些文本控件可以通过Text Kit提供的API来对文字进行排版和渲染处理。而UIWebView是基于WebKit的,不能使用Text Kit提供的功能。UILableUITextFieldUITextViewUIWebViewText KitWebKitCore TextCore Graphics第二章 UIView与控件1、 UIView是所有视图的基类,所有控件类UIControl和视图类均继承于UIView。一般情况下,应用只包含一个UIWindow,其中包含一个根视图UIView。根视图的类型决定了应用的类型。每个视图包括3个属性:l Superview:获得父视图对象,除了UIWindow,每个视图的父视图有且只有一个。l Subviews:获得子视图对象集合,可以有多个。l Window:获得视图所在的UIWindow对象。2、 iOS中的UIKit框架中的视图类型:l 控件:继承自UIControl类,能够响应用户事件。l 窗口:一个iOS应用只有一个UIWindow对象,是所有子视图的根容器。l 容器视图:包括UIScrollView、UIToolbar以及它们的子类,当内容超出屏幕时,可以提供滚动条。l 显示视图:用于显示信息,如UIImageView、UILabel、UIProgressView和UIActivityIndicatorView等。l 文本和web视图:显示多行文本,包括UITextView和UIWebView。l 导航视图:包括UITabBar和UINavigationBar。l 警告框和操作表:包括UIAlertView和UIActionSheet类。3、 控件的绝对布局和相对布局:l 选中控件的尺寸检查器,在View的Autosizing属性中,虚线代表相对距离,实线代表绝对距离。l 使用AutoLayout布局:为空间布局定义了一套约束,以定义控件和视图之间的关系。通过IB打开View下面的Constraints项,选中某一个控件的约束,Relation是指设定的距离之间的关系,包括等于、大于等于和小于等于,Constant是约束数值,Priority是约束等级。可以在IB中直接拖拽。4、 动作和输出口:l 动作:是为了响应一个控件的事件而定义的方法,返回值的类型为IBAction。l 输出口:为了能访问控件,需要为其定义输出口,关键字为IBOutlet。l 通过Interface Builder关联:点击“打开辅助编辑器”按钮,选中标签或按钮,同时按住control键,将控件拖拽到辅助编辑器的interface部分;在弹出的对话框中,connection栏中选择Outlet定义输出口,生成代码:property (weak, nonatomic) IBOutlet UILabel * label;选择Action定义动作,生成代码:- (IBAction) onClick: (id)sender;其中sender参数是事件源,是发出事件的控件对象。5、 注册系统键盘的关闭和打开事件:-(void) viewWillAppear:(BOOL)animated /注册键盘出现和隐藏通知NSNotificationCenter defaultCenter addObserver:self selector:selector (keyboardDidShow:) name: UIKeyboardDidShowNotification object:nil;NSNotificationCenter defaultCenter addObserver:self selector:selector (keyboardDidHide:) name: UIKeyboardDidHideNotification object:nil;super viewWillAppear:animated;-(void) viewWillDisappear:(BOOL)animated /解除键盘出现和隐藏通知NSNotificationCenter defaultCenter removeObserver:self name: UIKeyboardDidShowNotification object:nil;NSNotificationCenter defaultCenter removeObserver:self name: UIKeyboardDidHideNotification object:nil;super viewWillDisappear:animated;-(void) keyboardDidShow: (NSNotification *)notif /键盘打开时调用 -(void) keyboardDidHide: (NSNotification *)notif /键盘关闭时调用 6、 常用控件:d) 单行文本框控件TextFiled:n 由UITextField类创建,继承自UIControl,需要实现UITextFieldDelegate委托协议。n 通过IB添加委托协议:右击控件,快捷菜单中,将Outlets=delegate后面的小圆点拖到View Controllern Placeholder属性:提示信息,输入时自动消失。n 文本框的清除按钮:打开属性检查器,选择Clear Button属性的下拉列表,选择Is always visiblen 打开控件的属性检查器,keyboard属性下拉菜单有10种类型的键盘n 关闭键盘代码:- (BOOL)textFieldShouldReturn:(UITextField *)textField /点击键盘Return键或背景视图时触发textField resignFirstResponder; /调用UIResponder类中的此方法,以放弃键盘第一响应者return YES;e) 多行文本编辑框控件TextView:n 由UITextView类创建,继承自UIScrollView,需要实现UITextViewDelegate委托协议。n 关闭键盘代码:-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text if(text isEqualToString:n) textView resignFirstResponder; return NO; return YES;f) 开关控件UISwitch:类似于复选框控件,只有TRUE/YES和FALSE/NO两种状态,状态切换代码如下:- (IBAction)switchValueChanged:(id)sender UISwitch *witchSwitch = (UISwitch *)sender; BOOL setting = witchSwitch.isOn; self.leftSwitch setOn:setting animated:YES;g) 滑块控件UISlider:值是0.0f1.0f之间的浮点数,可以在属性检查器中设置其最大、最小和初始值。例程:- (IBAction)sliderValueChange:(id)sender UISlider *slider = (UISlider *)sender;int progressAsInt = (int)(slider.value + 0.5f);NSString *newText = NSString allocinitWithFormat:%d,progressAsInt;self.SliderValue.text = newText;h) 分段控件UISegmentedControl:类似于单选按钮,由两段至多段组成,每段相当于一个独立的按钮。例程:-(void)changeSegment:(UISegmentedControl *)segmentControl NSLog(segmentControl %d, segmentControl.selectedSegmentIndex);i) 活动指示器ActivityIndicatorView:相关方法:isAnimating/ startAnimating/ stopAnimatingj) 进度条控件ProgressView:设置和获得进度条当前值属性:progress属性,步长0.1,最大1.0k) 警告框AlertView:需要实现UIAlertViewDelegate委托协议;例程:l 声明:UIAlertView *alertView = UIAlertView alloc initWithTitle:Alert message:Alert text goes here delegate:self cancelButtonTitle:No otherButtonTitles:Yes, nil; /一个按钮可以将delegate设为nill 显示:alertView show; /cancelButton按钮索引是0,从左到右依次是1、2。l 回调:- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex l) 操作表ActionSheet:提供多于两个的选择。在iPhone中会从屏幕下方滑出来;布局是最下面是一个取消按钮,如果选项有一个破坏性的操作,将会放在最上面,且颜色是红色的。在iPad中,操作表随机出现在触发它的按钮周围,且不显示取消按钮。需要实现UIActionSheetDelegate委托协议。例程:UIActionSheet *actionSheet = UIActionSheet alloc initWithTitle:nil delegate:self cancelButtonTitle:取消 destructiveButtonTitle:破坏性按钮 otherButtonTitles:Fackbook,新浪微博,nil;actionSheet.actionSheetStyle = UIActionSheetStyleAutomatic; /其他模式:Default默认/透明/半透明actionSheet showInView:self.view; /按钮索引从上到下依次是0、1、2回调:- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex m) 工具栏UIToolbar:是工具栏按钮(UIBarButtonItem)的容器,主要应用于当前的局部界面。在iPhone中位于屏幕底部,按钮数不超过5个,否则最后一个按钮显示为更多按钮。在iPad中位于屏幕顶部,按钮数量没有限制。除了工具栏按钮,还可放置固定空格和可变空格,作用是在各个按钮之间插入一定的空间。n) 导航栏:主要用于导航,考虑的是整个应用。相关类:n UINavigationController:导航控制器,可以构建树形导航模式应用的根控制器。n UINavigationBar:导航栏,与导航控制器一一对应,管理一个视图栈,用来存放导航栏项目,处于栈顶的导航栏项目就是当前看到的导航栏项目。n UINavigationItem:导航栏项目,与导航栏是一对多的关系,在每个界面中都会看到对应的导航栏项目。分为左、中、右三个区域。左侧区域一般放置返回按钮(backBarButtonItem)或左按钮(leftBarButtonItem);右侧区域一般放置一个右按钮(rightBarButtonItem);中间区域是标题(title)或提示信息(prompt)。n UIBarButtonItem:是导航栏中的左右按钮。n 实现步骤:从IB对象库中拖拽一个NavigationBar控件到页面顶部,与视图顶部距离20点,这样不会遮挡状态栏。然后在导航栏项目中的左右两个区域分别拖拽一个BarButtonItem,打开左按钮的属性检查器,从Identifier中选择按钮类型,如Save;接下来设置导航栏项目的Title属性,如:Home。o) 日期选择器UIDatePicker:有四种模式:日期、日期和时间、仅时间、倒计时定时器。例程:NSDate * theDate = self.datePicker.date;NSLog(格式化为基于本地化的日期信息: %, theDate descriptionWithLocale:NSLocale currentLocale);NSDateFormatter * dateFormatter = NSDateFormatter alloc init ;dateFormatter setDateFormat:YYYY-MM-dd HH:mm:ss;NSLog(the date formate is: %, dateFormatter stringFromDate:theDate);self.label.text = dateFormatter stringFromDate:theDate;7、 普通选择器UIPickerView:需要实现UIPickerViewDelegate和UIPickerViewDataSource委托协议。例程:a) 首先将省市的数据存放到provinces_cities.plist文件中,此文件采用字典结构,省市共两级。- (void)viewDidLoad super viewDidLoad; NSBundle *bundle = NSBundle mainBundle; /获取属性列表文件中的全部数据NSString *plistPath = bundle pathForResource:provinces_cities ofType:plist; NSDictionary *dict = NSDictionary alloc initWithContentsOfFile:plistPath;self.pickerData = dict; /property (nonatomic, strong) NSDictionary *pickerData; 保存全部数据self.pickerProvincesData = self.pickerData allKeys; /property (nonatomic, strong) NSArray *pickerProvincesData; 省份名数据,默认取出第一个省的所有市的数据NSString *seletedProvince = self.pickerProvincesData objectAtIndex:0;self.pickerCitiesData = self.pickerData objectForKey:seletedProvince; /NSArray *pickerCitiesData; self.pickerView.dataSource = self; self.pickerView.delegate = self; - (IBAction)onclick:(id)sender /Component就是指拨盘,selectedRowInComponent返回从0开始的行索引。 NSInteger row1 = self.pickerView selectedRowInComponent:0;NSInteger row2 = self.pickerView selectedRowInComponent:1;NSString *selected1 = self.pickerProvincesData objectAtIndex:row1;NSString *selected2 = self.pickerCitiesData objectAtIndex:row2;NSString *title = NSString alloc initWithFormat:%,%市, selected1, selected2;b) 其次需要实现UIPickerViewDataSource数据源协议,用来设置拨轮数目、选择器的行数等:- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView return 2; /设置拨轮数目- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component if (component = 0) /省份个数return self.pickerProvincesData count; else /市的个数return self.pickerCitiesData count;c) 最后实现委托协议UIPickerViewDelegate方法-(NSString *)pickerView:(UIPickerView *)pickerView /为某个拨轮的行提供显示数据titleForRow:(NSInteger)row forComponent:(NSInteger)component if (component = 0) /选择省份名return self.pickerProvincesData objectAtIndex:row; else /选择市名return self.pickerCitiesData objectAtIndex:row;- (void)pickerView:(UIPickerView *)pickerView /选中选择器的某个拨轮中的某行时调用 didSelectRow:(NSInteger)row inComponent:(NSInteger)component if (component = 0) NSString *seletedProvince = self.pickerProvincesData objectAtIndex:row;NSArray *array = self.pickerData objectForKey:seletedProvince;self.pickerCitiesData = array;self.pickerView reloadComponent:1;8、 屏幕滚动控件ScrollView:有两个子类:UITextView和UITableView,在内容超出屏幕时提供滚动条。a) 常用属性:n rame属性:width和height分别指ScrollView的宽和高。n contentSize属性:内容视图的大小,返回CGSize结构体类型,width和height分别指宽和高。例如:self.scrollView.contentSize = CGSizeMake(320, 600); /viewDidLoad方法中声明n contentInset属性:有4个分量,分别是top/bottom/left/right,分别代表顶、底、左和右的距离。n contentOffset属性:是内容视图坐标原点与ScrollView坐标原点的偏移量,返回CGPoint结构体类型,包含x和y两个成员,表明内容视图沿x或y轴的偏移量。例如,设定y轴正偏移110点的代码: self.scrollView.contentOffset = CGPointMake(0, 110); /不含动画效果的偏移,viewDidAppear方法中调用self.scrollView setContentOffset:CGPointMake(0, 110) animated:YES; /有动画效果的偏移b) 例程:键盘与其他控件的协同,即键盘弹出后不会遮挡控件。需要调整ScrollView中的控件与上边框的距离为绝对距离,这样它们的y坐标就不会因为父视图高度的变化而变化。打开控件的尺寸检查器,选择View的Autosizing属性中矩形顶部的虚线改为实线。-(void) keyboardDidShow: (NSNotification *)notif if (keyboardVisible) /键盘已经出现要忽略通知return;NSDictionary* info = notif userInfo; / 获得键盘尺寸NSValue* aValue = info objectForKey:UIKeyboardFrameEndUserInfoKey;CGSize keyboardSize = aValue CGRectValue.size;CGRect viewFrame = self.scrollView.frame; /重新定义ScrollView的尺寸viewFrame.size.height -= (keyboardSize.height); /减去键盘的高度,则可以完全显示ScrollViewself.scrollView.frame = viewFrame; CGRect textFieldRect = self.textField frame; /滚动到当前文本框的矩形区域 self.scrollView scrollRectToVisible:textFieldRect animated:YES; /将屏幕滚动到当前的文本框keyboardVisible = YES; /定义属性:BOOL keyboardVisible; 键盘出现标识-(void) keyboardDidHide: (NSNotification *)notif self.scrollView.frame.size.height += keyboardSize.height; / 获得键盘尺寸,代码同上keyboardVisible = NO;9、 集合视图:一种增强的网格视图开发,包括单元格、节(行)、补充视图(节的头脚)和背景视图。a) 打开ViewController.h文件,将父类UIViewController修改为UICollectionViewControllerb) 读入plist数据到数组:self.eventsArr = NSArray alloc initWithContentsOfFile:plistPath;c) 自定义单元格类,继承自UICollectionViewCell,是一个可以放置其他视图和控件的视图。interface Cell : UICollectionViewCellproperty (strong, nonatomic) IBOutlet UIImageView *imageView; IBOutlet UILabel *label;end /需要将UIImageView和UILabel通过IB拖到单元格中implementation Cell- (id)initWithFrame:(CGRect)frame self = super initWithFrame:frame; if (self) / Initialization code,如果通过IB实现,这里不需要实现代码 return self;endd) 从IB中把原来的View删除,拖拽一个Collection View视图到View Controller下面。e) 选中Connection View Cell,打开标识检查器,将Custom Class=Class设为自定义单元格类Cell。f) 打开属性检查器,在Collection Reusable View=Identifier中输入Cell,设定可重用单元格标识。g) 连接输出口:右键选中单元格,弹出菜单中选择Outlets=ImageView后的小圆点,拖到UIImageView控件上;用同样的方法将Label控件与输出口属性label连接。h) 数据源协议UICollectionViewDelegate:- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView return self.events count / 2; /视图中节即行的个数-(NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section return 2; /某个节中的列的数目- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath Cell *cell = collectionView dequeueReusableCellWithReuseIdentifier:Cell forIndexPath:indexPath; NSDictionary *event = self.events objectAtIndex:(indexPath.section*2 + indexPath.row); cell.label.text = event objectForKey:name; cell.imageView.image = UIImage imageNamed:event objectForKey:image; return cell;i) 委托协议UICollectionViewDataSource:- (void)collectionView:(UICollectionView *)collectionView /选择单元格后触发,对应的是Deselect方法didSelectItemAtIndexPath:(NSIndexPath *)indexPath NSDictionary *event = self.events objectAtIndex:(indexPath.section*2 + indexPath.row);10、 网页控件UIWebView:内核是开源WebKit浏览器引擎,它不仅解析HTML,且是本地和web沟通的桥梁。a) 本地资源加载:采用同步方式,数据可以是本地文件或硬编码的HTML字符串方法一:loadHTMLString: baseURL方法,通过HTML字符串加载,baseURL参数设定主页文件的路径NSString *htmlPath = NSBundle mainBundle pathForResource:index ofType:html;NSURL *bundleUrl = NSURL fileURLWi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 晋升理论考试题及答案
- 微信支付java面试题及答案
- 医院科室培训
- 安全教育紧急电话
- 2025年医用气体终端项目立项申请报告模板
- 2025年教育游戏化在儿童道德游戏中的应用案例
- 西门子新入职员工培训
- 肿瘤细胞凋亡机制研究进展
- 大疱性类天疱疮病人的护理
- 湖南省长沙市岳麓实验中学2024-2025学年高一下学期6月月考地理试卷(含答案)
- GB/T 12149-2017工业循环冷却水和锅炉用水中硅的测定
- 断绝子女关系协议书模板(5篇)
- 成都小升初数学分班考试试卷五
- Q∕SY 01007-2016 油气田用压力容器监督检查技术规范
- 水利水电 流体力学 外文文献 外文翻译 英文文献 混凝土重力坝基础流体力学行为分析
- 零星维修工程项目施工方案
- 物流公司超载超限整改报告
- 起重机安装施工记录表
- 江苏省高中学生学籍卡
- 碳排放问题的研究--数学建模论文
- 赢越酒会讲解示范
评论
0/150
提交评论