1.编写IOS应用程序有何不同
1)只有一个应用程序正在运行
2)只有一个窗口
3)受限访问
4)有限的访问时间
5)有限的屏幕大小
6)有限的系统资源
7)不支持垃圾收集
8)新功能 :定位方法 内置照相机和图片库 内置加速计
9)与众不同的方法
2.nib文件的构成
1)File‘s Owner 它表示从磁盘加载nib文件的对象
2)First Responder 第一响应者就是用户当前正在与之交互的对象
3)UIview对象是用户可以看到并能与之交互的的区域
3.MVC模型将所有功能划分成三种
1)模型。保存应用程序数据的类
2)视图。窗口、控件和其他用户可以看到并能与之交互的元素
3)控制器。将试图和模型绑定在一起
在iPhone程序开发中,所有的控件、窗口等都继承自 UIView,对应MVC中的V。UIView及其子类主要负责UI的实现,而UIView所产生的事件都可以采用委托的方式,交给UIViewController实现。对于不同的UIView,有相应的UIViewController,对应MVC中的C。例如在iOS上常用的UITableView,它所对应的Controller就是UITableViewController。至于MVC中的M,就需要用户根据自己的需求来实现了。
iOS的sdk中已经为我们提供了许多视图组件:例如:UIView,UIViewController。这也方便开发者进行开发。同时,也对数据模型中可能使用到的一些组件进行了封装:数据库、CoreDta等,这有利于开发者迅速的建立一个基于MVC设计模式的程序。
4)IBOutlet作用是告诉Interface Builder此实例变量被连接到nib中的对象。创建任何
关于需要连接到nib文件的对象的实例变量都必须以IBOutlet关键字开头。
5)操作是控制器类中的方法。通过关键字IBAction声明。
-(IBAction)dosomething:(id)sender;
6)每个iPhone应用程序都有一个且仅有一个UIApplication实例,负责应用程序的运行以及处理各种营运程序级功能,如将输入发送给合适的控制器类。
7)@property(retain,nonatomic) IBOutlet UILabel *statusText;中属性retain通知编译器向分配给此属性的对象发送一个保留信息,确保实例变量在使用过程中不会从内存中清除。 属性nonatomic将更改访问方法和修改方法的生成方式,默认情况下,这些方法在创建时会具备另外一些代码,用于帮助你编写多线程程序。
8)@synthesize statusText;作用是通知编译器自动为我们创建访问方法和修改方法。
9)通过sender获取被按下按钮的标题
NSString *title = [sender titleForState:UIControlStateNormal];
10)在AppDelegate.m文件中 -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{};该方法将在应用程序完成所有设置任务。并准备好开始与用户交互式触发。它的委托版本将试图控制器的视图作为子视图添加到应用程序的主窗口中,并将窗口设置为可见。
11)隐藏键盘:取消第一响应者状态
-(IBAction)textfieldDoneEditiog:(id)sender
{
[sender resignFirstResponder];
}
xib中Did End On Exit连接到File‘s Owner
12)通过触摸背景关闭键盘
-(IBAction)backgroundTap:(id)sender
{
[nanmeField resignFirstResponder];
[numberField resignFirstResponder];
}
xib中把class的UIview改为UIControl,从Touch Down连接到File’s Owuer。
13)通过touch事件关闭键盘
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
if (touch.tapCount >= 1)
{
[self.hostTextField resignFirstResponder];
[self.portTextField resignFirstResponder];
[self.myNameTextField resignFirstResponder];
[self.passwordTextField resignFirstResponder];
}
}
4.多视图
1)所有多视图应用程序都使用UIKit提供的特定控制器类。标签栏界面是使用UITabBarController类来实现的,而导航栏界面是使用UINavigationController实现的。
2)在多视图应用程序中,根控制器的任务是获取两个或更多其他视图并根据用户输入向用户提供适当的视图。
5.选取器(Pickers)
1)五种选取器:日期选取器、单组件选取器、多组件选取器、依赖组件选取器、利用图像自定义选取器。
2)委托(picker)、数据源(picher data source)
选取器要求委托在特定的组件上的特定位置绘制一个字符串或一个视图。
选取器通过数据源获知组件和每个组件中的行数。
6. 定义按钮
UIButton *scaleUpButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[scaleUpButton setTitle:@"放 大" forState:UIControlStateNormal];
scaleUpButton.frame = CGRectMake(40, 420, 100, 40);
[scaleUpButton addTarget:self
action:@selector(scaleUp)
forControlEvents:UIControlEventTouchUpInside];
7.设置视图背景图片
UIImageView *aView;
[aView setImage:[UIImage imageNamed:@”name.png”]];
view1.backgroundColor = [UIColor colorWithPatternImage:
[UIImage imageNamed:@"image1.png"]];
8.给cell加箭头
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell选中无颜色提示 [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
cell不可选 cell.userInteractionEnabled = NO;
9.NavigationController的使用
1)返回按钮
定制返回按钮的标题还有事件的话,可以用以下代码。
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];
注意,这里的self是第一级的view controller。这样的话第二级的页面将显示“Back”。
2)左右按钮
navigation item还有两个属性leftBarButtonItem rightBarButtonItem。NSL
一般leftBarButtonItem只出现在RootviewController中使用,因为其他页面一般都显示一个返回按钮。
UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings"
style:UIBarButtonItemStylePlain target:self action:@selector(handleSettings)];
self.navigationItem.rightBarButtonItem = settingsButton;
[settingsButton release];
这会在右侧添加一个“Setting”的按钮,并触发handleSetting事件。
__FUNCTION__
打印当前函数的名字
NSlog(@”%@”,__FUNCTION__);
11.Nsstring中的数据按“,”分开
NSString *string = [[NSString alloc] initWithString:@"One,Two,Three,Four"];
NSLog(@"string:%@",string);
NSArray *array = [string componentsSeparatedByString:@","];
12.NSDate时区设置
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
13.查找数组中元素位置
[array indexOfObject:str]
14.旋转
CGAffineTransform rotation = CGAffineTransformMakeRotation(M_PI_2);
[xxx setTransform:rotation];
15.圆角
//假设我的这个UIImageView 叫userHeadimgV;
//开始画圆角吧。
userHeadimgV.layer.masksToBounds = YES; //没这句话它圆不起来
userHeadimgV.layer.cornerRadius = 5.0; //设置图片圆角的尺度
16.ios ASIFormDataRequest上传图片到php服务器
需要ASIHTTPRequest第三方库的童鞋请到我的资源下载
使用ASIHTTPRequest第三方库需要导入系统包如下:
libz.1.2.5.dylib ,
MobileCoreServices.framework ,
SystemConfiguration.framework ,
CFNetwork.framework ,
CoreGraphics.framework
需要导入ASIHTTPRequest包里的ASIFormDataRequest.h
#import "ASIFormDataRequest.h"
//上传图片
-(void)uploadImages:(UIButton *)sender
{
NSData *data = UIImagePNGRepresentation(self.img.image);
NSURL *url = [[NSURL alloc]initWithString:@"http://127.0.0.1/uploadFile/upload.php"];
//以表格形式的请求对象
ASIFormDataRequest *request = [[ASIFormDataRequest alloc]initWithURL:url];
request.delegate =self;
request.requestMethod = @"POST";//设置请求方式
//添加请求内容
[request addData:data withFileName:[NSString stringWithFormat:@"%d.png",arc4random()] andContentType:@"image/png" forKey:@"file"];
//开始异步请求
[request startAsynchronous];
//如果成功则自动执行
[request setDidFinishSelector:@selector(requestedSuccessfully)];
//如果失败则自动执行
[request setDidFailSelector:@selector(requestedFail)];
}
-(void)requestedSuccessfully
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"图片上传成功!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];
[alert show];
}
-(void)requestedFail
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"图片上传失败!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];
[alert show];
}
使用的php文件 upload.php
<?php
header("Content-type:text/html;charset=utf-8");
print_r($_FILES[‘file‘]);
$filename = $_FILES[‘file‘][‘name‘];
if(!$_FILES[‘file‘][‘error‘]){
if(move_uploaded_file($_FILES[‘file‘][‘tmp_name‘],"./upload/".$filename))
{
echo "文件上传成功";
}else{
echo "文件上传失败le";
}
}else{
echo "文件上传错误";
}
?>
17.监听电话状态
先导入看清楚 要先导入CoreTelephony框架 再写下面的
#import <CoreTelephony/CTCall.h>
#import <CoreTelephony/CTCallCenter.h>
然后 我是写在 appicationFinished(忘了怎么写的)
CTCallCenter*callCenter=(CTCallCenter*)[[CTCallCenter alloc] init];
callCenter.callEventHandler=^(CTCall*call){
if (call.callState==CTCallStateDisconnected) {
UIAlertView*alert=[[UIAlertView alloc] init];
[email protected]"CTCallStateDisconnected";
[alert addButtonWithTitle:@"OK"];
[alert show];
[alert release];
}
else if(call.callState==CTCallStateConnected){
UIAlertView*alert=[[UIAlertView alloc] init];
[email protected]"CTCallStateConnected";
[alert addButtonWithTitle:@"OK"];
[alert show];
[alert release];
}
else if(call.callState==CTCallStateIncoming){
UIAlertView*alert=[[UIAlertView alloc] init];
[email protected]"CTCallStateIncoming";
[alert addButtonWithTitle:@"OK"];
[alert show];
[alert release];
}
};