#import "ViewController.h"
#import "NSString+Hash.h"
#define kusernameKey @"usernameKey"
#define kpasswordKey @"passwordKey"
@interface ViewController ()
@property(nonatomic,retain)UITextField *nameFd;
@property(nonatomic,retain)UITextField *pwdFd;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self login];
}
-(void)login{
_nameFd = [[UITextField alloc]initWithFrame:CGRectMake(20, 60,self.view.bounds.size.width - 40, 40)];
_nameFd.placeholder = @"请输入用户名";
_nameFd.borderStyle = UITextBorderStyleRoundedRect;
[self.view addSubview:_nameFd];
_pwdFd = [[UITextField alloc]initWithFrame:CGRectMake(20, 140, self.view.bounds.size.width - 40, 40)];
_pwdFd.placeholder = @"请输入登入密码";
_pwdFd.borderStyle = UITextBorderStyleRoundedRect;
//是否安全输入,如果是的,输入内容将为“点”
_pwdFd.secureTextEntry = YES;
[self.view addSubview:_pwdFd];
UIButton *loginBtn = [[UIButton alloc]initWithFrame:CGRectMake(20, 220, self.view.bounds.size.width-40, 40)];
[loginBtn setTitle:@"登入" forState:UIControlStateNormal];
loginBtn.backgroundColor = [UIColor purpleColor];
loginBtn.layer.cornerRadius = 8; //按钮圆角
//按钮的边框颜色设置:必须加CGColor
loginBtn.layer.borderWidth = 4;
loginBtn.layer.borderColor = [UIColor greenColor].CGColor;
[loginBtn addTarget:self action:@selector(loginAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:loginBtn];
[self loadUserInfo];
}
// 从偏好设置中取出账号和密码
- (void)loadUserInfo
{
NSString *username = [[NSUserDefaults standardUserDefaults] objectForKey:kusernameKey];
NSString *passeord = [[NSUserDefaults standardUserDefaults] objectForKey:kpasswordKey];
if (username.length && passeord.length) { // 如果有值,直接取出来!
self.nameFd.text = username;
self.pwdFd.text = passeord;
}
}
//点击按钮:登入事件
-(void)loginAction{
// 客户端跟服务器交互: 如果不写这一句: 用户可以随意访问服务器的这个接口!
// 有些业务逻辑! 是交给服务器处理还是在客户端处理?
// 复杂的业务逻辑,尽量交给服务器来处理;如果涉及到数据(同步),也交给服务器处理!
// 客户端处理: 判断电话号码是否合法/判断用户是否输入信息等等... 前段处理可以较少服务器的压力!
if (!self.nameFd.text.length && !self.pwdFd.text.length) {
NSLog(@"请输入账号和密码");
}else
{
// 1.创建请求 (POST请求)
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/httpLogin/login.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 设置请求方法:
request.HTTPMethod = @"POST";
// 对密码进行加密之后,再发送!
NSString *password = [self.pwdFd.text md5String];
NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@",self.nameFd.text,password];
// 设置请求体:
request.HTTPBody =[bodyStr dataUsingEncoding:NSUTF8StringEncoding];
// 2. 发送请求
[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (data) {
// NSLog(@"data:%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
// 解析 JSON 数据
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
NSLog(@"%@",dict[@"userId"]);
if (dict[@"userId"]) { // 如果服务器返回了 userId 说明账号密码正确,登陆成功!
NSLog(@"登陆成功!");
// 如果登陆成功,用户再次进入程序的时候,就不需要再次输入账号和密码了!需要在本地存储一下账号和密码!
[self saveUserInfo];
}else
{
NSLog(@"账号或者密码错误");
}
}else
{
NSLog(@"连接错误,请重新尝试连接服务器");
}
}] resume];
}
}
// 将密码保存在偏好设置中
- (void)saveUserInfo
{
// 不能直接以密码明文的形式保存密码,需要加密之后再保存
// 将密码进行 MD5 加密
NSString *password = [self.pwdFd.text md5String];
// 单例.
// NSUserDefaults *users = [NSUserDefaults standardUserDefaults];
[[NSUserDefaults standardUserDefaults] setObject:self.nameFd.text forKey:kusernameKey];
[[NSUserDefaults standardUserDefaults] setObject:password forKey:kpasswordKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
// [self demo2];
}
//Get请求方法:带参数的网络请求!(如果需要上传参数给服务器)
-(void)demo1{
/*
1.参数格式: key=value (key:服务器接受参数的key值,在实际开发中,后端人员/接口文档中会告诉你. value:就是需要告诉服务器的具体参数内容)
2.一般情况下,服务器需要我们提供多个参数! 参数和参数之间以 & 分隔 username=zhangsan&password=zhang
1.第一种告诉服务器参数的方法: 将参数拼接在 url 中! 注意:在 ? 后面拼接参数! 一个 url 中, ? 后面的内容都是参数!
GET :http请求方法,从服务器获取数据! 如果使用 get 请求发送参数给服务器,需要将参数拼接在 url 中!
缺点: 所有的参数都在 url 中. 信息不安全! */
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/httpLogin/login.html?username=zhangsan&password=zhang"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 2. 发送请求
[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// 处理服务器返回的数据!
NSLog(@"data:%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}] resume];
}
//POST 请求
-(void)demo2{
// 1. 创建请求:由于 POST 请求需要手动指定 http 的请求方法为 POST ,所以只能用 可变请求!
// 接口
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/httpLogin/login.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 设置请求方法为 POST ; 默认情况下,所有的请求都是 GET 请求.
request.HTTPMethod = @"POST";
// POST 请求的参数,都是放在请求体中的! 注意:请求体式二进制数据!
// 设置请求体内容:
NSString *str = [NSString stringWithFormat:@"username=zhangsan&password=zhang"];
// 将请求体字符串转换成二进制数据
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
//放入请求体
request.HTTPBody = data;
// 2. 发送请求 // POST 请求只能使用下面这个方法!
[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//处理服务器返回的数据
NSLog(@"data:%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}] resume];
}
iOS 添加边框圆角
转载文章标签 iOS 添加边框圆角 objective-c 服务器 数据 客户端 文章分类 iOS 移动开发
下一篇:如何用python进行sm3加密
-
有趣的css - 边框动效按钮
交互感比较强的一个动效按钮。
动效设计 交互设计 ux/ui 动效按钮 css -
给button添加边框和圆角
button是我们经常用到的控件,我把它的属性罗列一下:
ios button layer 属性 控件 ci 圆角 -
圆形边框和圆角边框
①画
css html 圆角矩形