H:/1008/00_mac环境下PHP+MySQL+Apache.txt
服务器安装笔记
Apache+PHP+MySQL
说明:
sudo 表示使用管理员权限执行命令,以保护系统文件上会被破坏,使用sudo需要密码
一. vi的快捷键,vi有两种状态,一个是查看状态,一个是编辑状态
esc 退出编辑状态
i 在当前位置插入 insert
I 在一行的开始位置插入
x 删除当前字符
:wq 保存并退出
:q! 直接退出 不保存
/ 查找
1. Apache 在苹果上的Web服务器,TomCat提供Web服务的
单纯浏览的话,配置Apache即可
1) 启动Apache
sudo apachectl -k start
2) 检测Apache运行状态
打开Safari输入http://localhost,如果看到It works!说明Apache已经启动
3) Apache默认文档目录是/Library/WebServer/Documents/
通常上在此目录设置文件
4) 建立个人网站目录
a) 在Finder中建立一个Sites的文件夹
b)
cd /etc/apache2/users 进入Apache的用户文件夹
创建一个文件,文件名:用户名.conf
whoami 可以查看当前的用户名
sudo vi apple.conf 新建配置文件
teacher:users apple$ sudo vi apple.conf
在文件中输入以下内容,其中 /Users/apple/Sites/ 是此前建立Sites文件夹的完整位置
<directory users="" apple="" sites="">
Options Indexes MultiViews
AllowOverride All
Order allow,deny
Allow from all
</directory>
添加内容之后,在vi中按esc进入查看模式,输入:wq保存并退出
重新启动Apache
sudo apachectl -k restart
测试用户文件夹
http://localhost/~apple/就可以访问用户文件夹
访问用户文件夹之前,需要在Sites文件夹中建立一个html文件
在其中输入
<h1>Hello World!</h1>
2. php
Mac系统默认已经安装php,只是没有激活,要使用php需要修改apache的配置文件
cd /etc/apache2
sudo vi httpd.conf
输入 / 查找php
找到LoadModule php5_module libexec/apache2/libphp5.so
按I到行首
按esc退出编辑状态
按x删除当前字符
:wq 保存并退出
重启apache
sudo apachectl -k restart
<?php phpinfo(); ?>
3. 配置mysql的快捷方式,不然每次全路径进mysql很麻烦
cd /etc
ls -l bashrc
sudo chmod +w bashrc 修改管理员可以写模式
sudo vi bashrc
在文件末尾加入以下两行
alias mysql='/usr/local/mysql/bin/mysql'
alias mysqladmin='/usr/local/mysql/bin/mysqladmin'
设置管理员密码
mysqladmin -u root password "123"
剩余部分,可参见html文档和sql文件
H:/1008/01_网络_登录_NSURLRequest_MainViewController.m
// MainViewController.m
// 网络基础-用户登录
// Created by apple on 13-10-8.
/*
0,GET使用NSURLRequest请求
POST使用其子类NSURLMutableRequest请求
1,下面用类方法,不用设置代理
方式一,NSURLConnection类方法,异步发送请求
方式二,NSURLConnection类方法,同步发送请求
2,下面用对象的方法,要设置代理,并实现代理的各种方法,还要手动[conn start]
NSURLConnection *conn = [NSURLConnection
connectionWithRequest:request delegate:self];
[conn start];
*/
#import "MainViewController.h"
@interface MainViewController () <nsurlconnectiondatadelegate>
@property (weak, nonatomic) UITextField *nameTextField;
@property (weak, nonatomic) UITextField *passwordTextField;
// 从服务器接收的完整数据,用在Connection的代理方法,拼接数据用
@property (strong, nonatomic) NSMutableData *serverData;
@end
@implementation MainViewController
/*
一. 网络请求的步骤
1. 确定地址NSURL
2. 建立请求NSURLRequest(GET)或者其子类NSURLMutableRequest(POST)
3. 使用类方法,直接发送同步或异步请求,在block代码块中处理返回数据~
3. 如果使用对象方法,并启动连接NSURLConnection
4. 则要通过代理方法处理网络请求
遵守协议:NSURLConnectionDataDelegate
二. 网络代理方法
1. 接收到服务器的响应,服务器要传数据,客户端做接收准备
2. 接收服务器传输的数据,可能会多次执行,唯一要做的是拼接
3. 接收数据完成,做后续处理,如果对返回的内容解析
4. 服务器请求失败,原因很多(网络环境等等)
5. 向服务器发送数据,此方法仅适用于POST,尤其上传文件,可跟踪进度条
三. GET方法 URLRequest
在NSURL中,指定参数(如果有,也可以不指定参数),例如:http://www.baidu.com
四. POST方法
定义一个可变的URLMutableRequest
1) 等待超时的时长
[request setTimeoutInterval:2.0f];
2) 请求方式(默认是GET),与大小写无关
[request setHTTPMethod:@"POST"];
3) 数据体 data类型
NSData *body = [string dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];
五. 同步方法——必须要某个网络请求完成后,才能后续执行,例如网银登录
看到方法参数中包含__autoreleasing字样,在定义的对象名前面加上“&”
NSURLResponse *response = nil;
NSError *error = nil;
// 同步操作没有完成,后面的代码不会执行
NSData *data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response error:&error];
1> 接收到数据,表示工作正常
2> 没有接收到数据,但是error为nil,表示接收到空数据
通常服务器没有对该请求做任何响应
3> error不为空,表示请求出错
六. 类方法,直接异步方法发送请求
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *reponse,
NSData *data, NSError *error) {
// 请求完成后的数据解析,处理
}];
异步方法不用等待网络请求结束
七. NSURLRequest
使用以下实例化方法,可以在实例化的同时,指定请求超时时长。
1. url
2. 缓存策略 默认是NSURLRequestUseProtocolCachePolicy
3. 超时时长
NSURLRequest *rq = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:2.0f];
八. 缓存策略
NSURLRequest的cachePolicy属性可以设置缓存策略,
这是一种内存缓存,非硬盘缓存使用缓存的目的是
为了使用的应用程序能更快速的响应用户输入,使程序高效的运行。
有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求
cachePolicy支持的缓存策略包括:
NSURLRequest UseProtocolCachePolicy
默认的缓存策略,要在协议的实现方法中指定缓存逻辑
NSURLRequest ReloadIgnoringCacheData
忽略缓存从原始地址下载
NSURLRequest ReturnCacheDataElseLoad
没有缓存时从原始地址下载
NSURLRequest ReturnCacheDataDontLoad
只使用缓存,如果不存在缓存,请求失败,
适用于没有建立网络连接离线模式
NSURLRequest ReloadIgnoringLocalAndRemoteCacheData
忽略本地和远程的缓存数据,直接从原始地址下载,
与NSURLRequestReloadIgnoringCacheData类似
NSURLRequest ReloadRevalidatingCacheData
验证本地数据与远程数据是否相同,如果不同则下载远程数据,
否则使用本地数据
*/
- (void)viewDidLoad
{
[super viewDidLoad];
// 调用自定义方法,设置界面UI
[self setupUI];
}
// 自定义方法,设置界面UI
- (void)setupUI
{
// 数组存放的是4个控件,两个标签,两个输入框
NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:4];
for (NSInteger i = 0; i < 2; i++) {
// 1. 两个Label
UILabel *label = [[UILabel alloc]initWithFrame:
CGRectMake(20, 20 + i * 40, 80, 40)];
[self.view addSubview:label];
[arrayM addObject:label];
}
// 2. 两个TextField
for (NSInteger i = 0; i < 2; i++) {
UITextField *textField = [[UITextField alloc]initWithFrame:
CGRectMake(100, 24 + i * 40, 200, 32)];
// 1) 边框样式
[textField setBorderStyle:UITextBorderStyleRoundedRect];
// 2) 文字的垂直对齐
[textField setContentVerticalAlignment:
UIControlContentVerticalAlignmentCenter];
[self.view addSubview:textField];
[arrayM addObject:textField];
}
// 3. 设置label
[(UILabel *)arrayM[0]setText:@"用户名:"];
[(UILabel *)arrayM[1]setText:@"密码:"];
self.nameTextField = arrayM[2];
self.passwordTextField = arrayM[3];
// 设置密码输入
[self.passwordTextField setSecureTextEntry:YES];
// 4. 1个UIButton
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(100, 106, 200, 40)];
[button setTitle:@"登录" forState:UIControlStateNormal];
[self.view addSubview:button];
// 为登录按钮监听点击事件
[button addTarget:self action:@selector(login)
forControlEvents:UIControlEventTouchUpInside];
}
#pragma mark - 登录按钮,使用Connection类方法,异步或同步发送Post请求,无需代理
- (void)login
{
NSString *userName = self.nameTextField.text;
NSString *pwd = self.passwordTextField.text;
// 同步登录 POST请求
// 1. 确定地址NSURL
NSString *urlString = [NSString
stringWithFormat:@"http://192.168.3.252/~apple/itcast/login.php"];
NSURL *url = [NSURL URLWithString:urlString];
// 2. 建立请求 MutableURLRequest(POST)
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 0) 网络访问超时时间
[request setTimeoutInterval:2.0f];
// 1) 请求方式
[request setHTTPMethod:@"POST"];
// 2) 数据体,POST请求中创建数据体时,如果有中文,不需要转换
// 因为dataUsingEncoding已经实现了转码
NSString *bodyStr = [NSString
stringWithFormat:@"username=%@&password=%@", userName, pwd];
// 将NSString转换为NSData
NSData *body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];
// 最后,方式一,NSURLConnection类方法,异步发送请求
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *reponse,
NSData *data, NSError *error) {
if (data != nil) {
// 通过data生成string,必须用alloc方法
NSString *str = [[NSString alloc]initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"服务器返回的内容是:%@", str);
} else if (data == nil && error == nil) {
NSLog(@"接收到空数据");
} else {
NSLog(@"%@", error.localizedDescription);
}
}];
NSLog(@"come here");
// 最后,方式二,NSURLConnection类方法,同步发送请求
// 提示:凡是看到方法参数中包含__autoreleasing字样
// 都需要传入该对象的地址,也就是在定义的对象名前面加上“&”就可以了
NSURLResponse *response = nil;
NSError *error = nil;
// 同步操作没有完成,后面的代码不会执行
NSData *data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response error:&error];
// 1> 接收到数据,表示工作正常
// 2> 没有接收到数据,但是error为nil,表示接收到空数据
// 通常服务器没有对该请求做任何响应
// 3> error不为空,表示请求出错
if (data != nil) {
// 通过data生成string,必须用alloc方法
NSString *str = [[NSString alloc]initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"服务器返回的内容是:%@", str);
} else if (data == nil && error == nil) {
NSLog(@"接收到空数据");
} else {
NSLog(@"%@", error.localizedDescription);
}
}
#pragma mark - 私有方法,尽量不要在方法中直接使用属性
#pragma mark POST登录,使用Connection对象的方法,要设置代理
- (void)loginWithPostWithName:(NSString *)userName pwd:(NSString *)pwd
{
// 1. 确定地址NSURL
NSString *urlString = [NSString stringWithFormat:
@"http://192.168.3.252/~apple/itcast/login.php"];
NSURL *url = [NSURL URLWithString:urlString];
// 2. 建立请求 NSMutableURLRequest(POST)
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 1) 请求方式
[request setHTTPMethod:@"POST"];
// 2) 数据体,POST请求中创建数据体时,如果有中文,不需要转换
// 因为dataUsingEncoding已经实现了转码
NSString *bodyStr = [NSString stringWithFormat:
@"username=%@&password=%@", userName, pwd];
// 将NSString转换为NSData
NSData *body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];
// 3. 使用Connection对象的方法,要设置代理,和手动start连接
NSURLConnection *conn = [NSURLConnection connectionWithRequest:request
delegate:self];
// 启动连接,异步连接请求
[conn start];
// 服务器通知准备,准备中转数据
self.serverData = [NSMutableData data];
}
#pragma mark Get登录,使用Connection的对象方法,要设置代理,和手动start连接
- (void)loginWithGetWithName:(NSString *)userName pwd:(NSString *)pwd
{
// 1. 确定地址NSURL
NSString *urlString = [NSString stringWithFormat:
@"http://ip/~apple/itcast/login.php?username=%@&password=%@",
userName, pwd];
// 提示:
// 1) url中如果包含中文字符,需要转换成带百分号的格式
// 2) 在iOS开发中,如果没有意外,统统使用UTF8的格式
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:
NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString];
// 2. 建立请求NSURLRequest(GET)
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 3. 使用Connection对象的方法,要设置代理,和手动start连接
NSURLConnection *conn = [NSURLConnection connectionWithRequest:request
delegate:self];
// 启动连接,异步连接请求
[conn start];
// 服务器通知准备,准备中转数据
self.serverData = [NSMutableData data];
}
// NSURLConnection的代理方法,如果是conn对象start,要实现代理里面的方法
#pragma mark 1. 接收到服务器的响应,服务器即将传数据,客户端做接收准备
- (void)connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"response --> %@", response);
}
#pragma mark 2. 接收服务器传输的数据,可能会多次执行,只需要拼接即可
- (void)connection:(NSURLConnection *)connection
didReceiveData:(NSData *)data
{
// 对每次传输的数据进行拼接,需要中转数据(属性)
[self.serverData appendData:data];
}
#pragma mark 3. 接收数据完成,做后续处理
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
// 对方法2拼接的数据Á,做后续处理即可
NSString *str = [[NSString alloc]initWithData:self.serverData
encoding:NSUTF8StringEncoding];
// 对服务器返回的字符串进行处理
// 1) 从str中找出“用户名”所在的位置>0
NSRange range = [str rangeOfString:@"用户名"];
NSLog(@"%@", NSStringFromRange(range));
NSString *msg = nil;
if (range.location > 0) {
// 2) 取用户名后面的字符串,一直到末尾
NSString *name = [str substringFromIndex:(range.location +
range.length)];
NSLog(@"%@", name);
msg = [NSString stringWithFormat:@"欢迎欢迎:%@", name];
} else {
msg = @"用户名或密码错误,请重试!";
}
// 3) 欢迎归来
// 提示用户登录成功
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示"
message:msg delegate:nil cancelButtonTitle:@"确定"
otherButtonTitles:nil, nil];
[alertView show];
// 处理完服务器返回的数据之后,要清空数据
self.serverData = nil;
}
#pragma mark 4. 服务器请求失败,原因很多(网络环境等等)
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
NSLog(@"网络请求错误:%@", error.localizedDescription);
}
#pragma mark 5. 向服务器发送数据,此方法仅适用于POST,尤其上传文件
- (void)connection:(NSURLConnection *)connection
didSendBodyData:(NSInteger)bytesWritten
totalBytesWritten:(NSInteger)totalBytesWritten
totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
{
NSLog(@"发送数据给服务器,适合进度条更新");
}
@end
</nsurlconnectiondatadelegate>
H:/1008/02_UIWebView_MainViewController.m
// MainViewController.m
// UIWebView-演练
// Created by apple on 13-10-8.
#import "MainViewController.h"
@interface MainViewController ()
@property (weak, nonatomic) UIWebView *webView;
@end
@implementation MainViewController
/*
WebView加载本地文件可以使用加载数据的方式
1. NSData 本地文件对应的数据
2. MIMEType
3. 编码格式字符串
4. 相对地址,一般加载本地文件不使用,可以在指定的baseURL中查找相关文件
如果要用UIWebView显示对应的文件,必须知道准确的MIMEType
但是,不是所有格式的文件都可以通过本地数据的方式加载,即便是知道MIMEType
UIWebView加载内容的三种方式:
1. 加载本地数据文件
需要制定文件的MIMEType
编码格式使用@"UTF-8"
2. 加载html字符串
可以加载全部或者部分hmtl字符串
3. 加载NSURLRequest
前面两步与NSURLConnection一致
使用HTML5开发应用
优势:
1. 跨平台
2. 审批通过之后,就终身不需要审批,只需要在后台自己随时维护即可
弱势:
1. 没有办法利用硬件资源,加速剂、手势
2. 性能不好
部分显示html的功能,可以方便制作新闻客户端阅读部分的UI
*/
- (void)viewDidLoad
{
[super viewDidLoad];
// 调用自定义方法,设置UI界面
[self setupUI];
// 得到url方式之一:pathForResource+fileURLWithPath
NSString *path = [[NSBundle mainBundle]pathForResource:@"关于.docx"
ofType:nil];
NSURL *url = [NSURL fileURLWithPath:path];
// 得到url方式之二:URLForResource
NSURL *url = [[NSBundle mainBundle]URLForResource:@"iOS6Cookbook.pdf"
withExtension:nil];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// webView loadRequest 即可加载资源
[self.webView loadRequest:request];
}
// 自定义方法,设置UI界面
- (void)setupUI
{
// webView 全屏
UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.bounds];
[self.view addSubview:webView];
// 设置webView 检测所有数据类型
[webView setDataDetectorTypes:UIDataDetectorTypeAll];
self.webView = webView;
}
#pragma mark - webView 加载html字符串
- (void)loadHTMLString
{
// HTML5
// 直接加载HTML字符串,完整的html
NSString *str = @"<html><head><title>Hello</title></head><body><h1>Hello</h1><ul><li>123</li><li>321</li><li>1234567</li></ul></body></html>";
// 部分html
NSString *str1 = @"<h1>Hello</h1><ul><li>123</li><li>321</li><li>1234567</li></ul>";
[self.webView loadHTMLString:str1 baseURL:nil];
}
#pragma mark - webView loadData: MIMEType:加载pdf文件
- (void)loadPDF
{
NSString *path = [[NSBundle mainBundle]pathForResource:@"iOS6Cookbook.pdf" ofType:nil];
NSURL *url = [NSURL fileURLWithPath:path];
// 调用自定义方法 获取指定URL的MIMEType类型
NSLog(@"%@", [self mimeType:url]);
// 以二进制数据的形式加载沙箱中的文件,dataWithContentsOfFile
NSData *data = [NSData dataWithContentsOfFile:path];
[self.webView loadData:data MIMEType:@"application/pdf"
textEncodingName:@"UTF-8" baseURL:nil];
}
// 自定义方法 获取指定URL的MIMEType类型
- (NSString *)mimeType:(NSURL *)url
{
// 1. NSURLRequest
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 2. NSURLConnection
// 从NSURLResponse可以获取到服务器返回的MIMEType
// 使用同步方法获取response里面的MIMEType
NSURLResponse *response = nil;
[NSURLConnection sendSynchronousRequest:request
returningResponse:&response error:nil];
return response.MIMEType;
}
#pragma mark - 加载本地文本文件
- (void)loadText
{
NSString *path = [[NSBundle mainBundle]pathForResource:@"关于.txt"
ofType:nil];
NSURL *url = [NSURL fileURLWithPath:path];
// 调用自定义方法 获取指定URL的MIMEType类型
NSLog(@"%@", [self mimeType:url]);
NSData *data = [NSData dataWithContentsOfFile:path];
[self.webView loadData:data MIMEType:@"text/plain"
textEncodingName:@"UTF-8" baseURL:nil];
}
#pragma mark - 加载本地html文件
- (void)loadHTML
{
NSString *path = [[NSBundle mainBundle]pathForResource:@"demo.html"
ofType:nil];
NSURL *url = [NSURL fileURLWithPath:path];
// 调用自定义方法 获取指定URL的MIMEType类型
NSLog(@"%@", [self mimeType:url]);
// 以二进制数据的形式加载沙箱中的文件
NSData *data = [NSData dataWithContentsOfFile:path];
[self.webView loadData:data MIMEType:@"text/html"
textEncodingName:@"UTF-8" baseURL:nil];
}
@end
H:/1008/03_UIWebView浏览器_MainViewController.m
// MainViewController.m
// UIWebView-综合
// Created by apple on 13-10-8.
#import "MainViewController.h"
@interface MainViewController () <UITextFieldDelegate>
@property (weak, nonatomic) UIWebView *webView;
@end
@implementation MainViewController
/*
1. 在地址栏中输入要访问的地址,按下回车,webView加载地址栏中的内容
2. 在地址栏输入file://开头的地址,加载沙箱中的文件 file://关于.txt
*/
- (void)viewDidLoad
{
[super viewDidLoad];
// 调用自定义方法,设置界面UI
[self setupUI];
}
// 自定义方法,设置界面UI
- (void)setupUI
{
// 1. 顶部toolbar,宽320,高44
UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:
CGRectMake(0, 0, 320, 44)];
[self.view addSubview:toolBar];
// 1) TextField可以以UIBarButtonItem的自定义视图的方式加入toolbar
UITextField *textField = [[UITextField alloc]initWithFrame:
CGRectMake(10, 6, 200, 32)];
// 设置边框
[textField setBorderStyle:UITextBorderStyleRoundedRect];
// 设置垂直对齐
[textField setContentVerticalAlignment:
UIControlContentVerticalAlignmentCenter];
// 设置清除按钮,当编辑的时候,显示清除按钮
[textField setClearButtonMode:UITextFieldViewModeWhileEditing];
// 设置textField的代理
[textField setDelegate:self];
// TextField可以以UIBarButtonItem的自定义视图的方式加入toolbar
UIBarButtonItem *addressItem = [[UIBarButtonItem alloc]
initWithCustomView:textField];
// 2) 三个按钮,前进 后退 刷新,并绑定点击事件
UIBarButtonItem *btn_item_back = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemRewind
target:self action:@selector(goBack)];
UIBarButtonItem *btn_item_forward = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward
target:self action:@selector(goForward)];
UIBarButtonItem *btn_item_F5 = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
target:self action:@selector(refresh)];
// 将UIBarButtonItem加入toolBar
[toolBar setItems:@[addressItem, btn_item_back, btn_item_forward, btn_item_F5]];
// 2. 实例化UIWebView,并用成员变量记住
UIWebView *webView = [[UIWebView alloc]initWithFrame:
CGRectMake(0, 44, 320, 416)];
[self.view addSubview:webView];
self.webView = webView;
}
// 三个按钮之后退,点击事件
- (void)goBack
{
[self.webView goBack];
}
// 三个按钮之前进,点击事件
- (void)goForward
{
[self.webView goForward];
}
// 三个按钮之刷新,点击事件
- (void)refresh
{
// webView刷新
[self.webView reload];
}
// 三个按钮之 使用JS代码 提交表单
- (void)submit_by_js
{
// webView 可使用JS代码 提交表单
[self.webView stringByEvaluatingJavaScriptFromString:
@"document.forms[0].submit(); "];
}
#pragma mark - UITextField代理方法,textFieldShouldReturn,按回车键之后的操作
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
// 1. 按回车键之后的操作 先关闭键盘
[textField resignFirstResponder];
// 2. 再让webView加载地址栏中的内容,如果地址栏有内容才加载
// 关于字符串的比较,消耗性能较大,故判断字符串是否有内容 可使用长度
// 这样性能更好,此方法适用于所有编程语言
if (textField.text.length > 0) {
// 调用自定义方法,根据string类型的url加载资源
[self loadContentWithURLString:textField.text];
}
return YES;
}
// 自定义方法,根据string类型的url加载资源
- (void)loadContentWithURLString:(NSString *)urlString
{
BOOL hasError = YES;
// 针对urlString进行判断
// 1. 如果是http://开头的,说明是web地址,直接生成请求
if ([urlString hasPrefix:@"http://"]) {
// 调用自定义方法,加载url资源,参数是NSURL
[self loadURL:[NSURL URLWithString:urlString]];
hasError = NO;
} else if ([urlString hasPrefix:@"file://"]) {
// 2. 如果是file://xxx.txt开头的,说明要加载沙箱中的文件
// 1) 从urlString中取出文件名
NSRange range = [urlString rangeOfString:@"file://"];
NSString *fileName = [urlString substringFromIndex:range.length];
NSLog(@"%@", fileName);
// 2) 生成沙箱的url
NSURL *url = [[NSBundle mainBundle]URLForResource:fileName
withExtension:nil];
// 如果url==nil,说明本地没有文件
if (url != nil) {
hasError = NO;
}
// 3) 调用自定义方法,加载url资源,参数是NSURL
[self loadURL:url];
}
// 3. 如果输入地址错误,提示用户
if (hasError) {
UIAlertView *alerView = [[UIAlertView alloc]
initWithTitle:@"提示" message:@"地址错误"
delegate:nil cancelButtonTitle:@"确定"
otherButtonTitles:nil, nil];
[alerView show];
}
}
// 自定义方法,加载url资源,参数是NSURL
- (void)loadURL:(NSURL *)url
{
// 2. 建立Request
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 3. 加载Request
[self.webView loadRequest:request];
}
@end