iOS开发UI篇—实现一个私人通讯录小应用(一)

一、该部分主要完成内容

1.界面搭建

                      

2.功能说明

(1).只有当账号和密码输入框都有值的时候,登录按钮才能交互

(2).当取消勾选记住密码后,自动登录按钮也随之取消;当勾选了自动登录按钮时,记住密码按钮也一同勾选。

(3).点击登陆后,弹出蒙版,界面不可交互,程序能够简单判断账号和密码是否正确,如果不正确则给出相应的提示,如果正确则跳转到联系人列表界面。

二、实现过程和代码

项目文件结构图和界面搭建

实现代码:

TXloginViewController.m文件

  1 //  33-梁镋鑫通讯录(登录)
  2 //
  3 //  Created by 鑫 on 14-10-21.
  4 //  Copyright (c) 2014年 梁镋鑫. All rights reserved.
  5 //
  6
  7 #import "TXLoginViewController.h"
  8 #import "MBProgressHUD+MJ.h"
  9 @interface TXLoginViewController ()
 10 @property (weak, nonatomic) IBOutlet UITextField *accountField;
 11 @property (weak, nonatomic) IBOutlet UITextField *pwField;
 12 @property (weak, nonatomic) IBOutlet UIButton *loginBtn;
 13 @property (weak, nonatomic) IBOutlet UISwitch *rmbPwdSwitch;
 14
 15 - (IBAction)rmbPwdChange;
 16 @property (weak, nonatomic) IBOutlet UISwitch *autoLoginSwitch;
 17
 18 - (IBAction)autoLoginChange;
 19 - (IBAction)login;
 20
 21 @end
 22
 23 @implementation TXLoginViewController
 24
 25
 26 - (void)viewDidLoad
 27 {
 28     [super viewDidLoad];
 29
 30
 31
 32
 33
 34   //监听通知  控制器self去监听   name通知名称
 35     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.accountField];
 36     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.pwField];
 37
 38 }
 39 //移除监听
 40 -(void)dealloc
 41 {
 42     [[NSNotificationCenter defaultCenter] removeObserver:self];
 43 }
 44 /**
 45  *  文本框的文字发生改变时调用
 46  */
 47 -(void)textChange
 48 {
 49     //控制器按钮状态
 50 //    if (self.accountField.text.length>0&&self.pwField.text.length>0) {
 51 //        self.loginBtn.enabled = YES;
 52 //    }
 53 //    else
 54 //    {
 55 //        self.loginBtn.enabled = NO;
 56 //    }
 57     //简化后
 58
 59     self.loginBtn.enabled = (self.accountField.text.length&& self.pwField.text.length);
 60 }
 61 - (IBAction)rmbPwdChange {
 62     //取消记住密码
 63     if (self.rmbPwdSwitch.isOn ==NO) {
 64         self.autoLoginSwitch.on = NO;
 65     }
 66 }
 67 //自动登录的状态发生改变
 68 - (IBAction)autoLoginChange {
 69
 70     if (self.autoLoginSwitch.isOn) {
 71         self.rmbPwdSwitch.on=YES;
 72     }
 73
 74 }
 75
 76 //登陆
 77 //HUD指示器
 78
 79 - (IBAction)login { //账号tx 密码 123
 80
 81     if (![self.accountField.text isEqualToString:@"mj"]) {
 82         // 帐号不存在
 83         [MBProgressHUD showError:@"帐号不存在"];
 84         return;
 85     }
 86
 87     if (![self.pwField.text isEqualToString:@"123"]) {
 88         // 密码错误
 89         [MBProgressHUD showError:@"密码错误"];
 90         return;
 91     }
 92
 93     // 显示一个蒙版(遮盖)
 94     [MBProgressHUD showMessage:@"哥正在帮你登录中...."];
 95
 96     // 发送网络请求
 97
 98     // 模拟(2秒后执行跳转)
 99     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
100         // 移除遮盖
101         [MBProgressHUD hideHUD];
102
103         // 跳转 -- 执行login2contacts这个segue
104         [self performSegueWithIdentifier:@"login2contacts" sender:nil];
105     });
106
107 }
108
109
110 @end

三、segue的使用
1.简单介绍

Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue)

2.segue的三个属性

每一个Segue对象,都有3个属性

唯一标识  @property (nonatomic, readonly) NSString *identifier;

来源控制器 @property (nonatomic, readonly) id sourceViewController;

目标控制器  @property (nonatomic, readonly) id destinationViewController;

2.segue的两种类型

根据Segue的执行(跳转)时刻,Segue可以分为2大类型

自动型:点击某个控件后(比如按钮),自动执行Segue,自动完成界面跳转

按住Control键,直接从控件拖线到目标控制器。点击“登录”按钮后,就会自动跳转到右边的控制器。如果点击某个控件后,不需要做任何判断,一定要跳转到下一个界面,建议使用“自动型Segue”

手动型:需要通过写代码手动执行Segue,才能完成界面跳转

按住Control键,从来源控制器拖线到目标控制器。手动型的Segue需要设置一个标识(如图)。

在恰当的时刻,使用perform方法执行对应的Segue     [self performSegueWithIdentifier:@"login2contacts" sender:nil];

Segue必须由来源控制器来执行,也就是说,这个perform方法必须由来源控制器来调用。如果点击某个控件后,需要做一些判断,也就是说:满足一定条件后才跳转到下一个界面,建议使用“手动型Segue”

3.performSegueWithIdentifier:sender:

利用performSegueWithIdentifier:方法可以执行某个Segue,完成界面跳转

4.performSegueWithIdentifier:sender:方法的完整执行过程

[selfperformSegueWithIdentifier:@“login2contacts”sender:nil];

(1)根据identifier去storyboard中找到对应的线,新建UIStoryboardSegue对象

设置Segue对象的sourceViewController(来源控制器)

新建并且设置Segue对象的destinationViewController(目标控制器)

(2)调用sourceViewController的下面方法,做一些跳转前的准备工作并且传入创建好的Segue对象

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;

// 这个sender是当初performSegueWithIdentifier:sender:中传入的sender

(3)调用Segue对象的- (void)perform;方法开始执行界面跳转操作

取得sourceViewController所在的UINavigationController

调用UINavigationController的push方法将destinationViewController压入栈中,完成跳转

4.多个控制器间数据的传递

(1)顺传:从当前控制器将数据传递到下一个控制器

(2)逆传:从当前控制器将数据传递给前面的控制器

转载于:https://www.cnblogs.com/asd5551680/p/4069989.html

iOS开发UI篇—实现一个私人通讯录小应用(一)相关推荐

  1. iOS开发UI篇—实现一个私人通讯录小应用(二)

    一.实现功能说明 (1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作. 注意:注销按钮的单击事件已经进行了连线.实现-(void)actionSh ...

  2. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇-使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  3. iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

    iOS开发UI篇-使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 iOS开发UI篇-使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 一.项目 ...

  4. iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

    iOS开发UI篇-使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: 1 //2 // YY ...

  5. iOS开发UI篇—transframe属性(形变)

    iOS开发UI篇-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...

  6. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  7. iOS开发UI篇—UIWindow简单介绍

    iOS开发UI篇-UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWi ...

  8. iOS开发UI篇—简单介绍静态单元格的使用

    iOS开发UI篇-简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...

  9. iOS开发UI篇—实现UITableview控件数据刷新

    iOS开发UI篇-实现UITableview控件数据刷新 一.项目文件结构和plist文件 二.实现效果 1.说明:这是一个英雄展示界面,点击选中行,可以修改改行英雄的名称(完成数据刷新的操作). 运 ...

最新文章

  1. 文件管理,系统管理,系统安全常用指令整理
  2. webpack 教程 那些事儿05-多页应用
  3. serverless 框架_Malaguv1.4.1支持Serverless的微服务框架
  4. L型代码结构案例:Link访问权限(上)
  5. 从行驶的车上向上抛球,球真的会回到原地吗?
  6. 导出远程mysql数据库中的表_shell脚本实现导出远程mysql数据库表数据至本地
  7. C++女程序员一个人留在北京
  8. 温故而知新,8张 Javascript 思维导图助你成长
  9. ​从程序员到 33 岁的亿万富翁
  10. win11如何禁用后台应用权限 Windows11禁用后台应用权限的设置方法
  11. zookeeper资料
  12. DSP2812之定时器
  13. 【PyTorch】SiLU激活函数
  14. 华为手机自带的双系统模式,你知道吗?一部手机当两部使用
  15. 期货和股票平仓时成本计价的区别(期货和股票平仓时成本计价的区别是什么)
  16. Datawhale组队学习第五章-中值定理
  17. python能在ipad上运行吗_如何用iPad运行Python代码?
  18. Java 39---Hibernate框架(2)
  19. 阿里、有道科大讯飞齐为荣耀Magic2打call,透露YOYO想不到的技能
  20. Uncaughr SyntaxError:Ivalid or unexpected toke(JS)

热门文章

  1. 【转】Quartz.NET
  2. Java程序Date类型比较
  3. MySQL列类型之——数值类型
  4. 网管必知远程终端3389端口合理修改秘藉
  5. Hive 之 排序和reduce设置
  6. 基于FPGA实现SPI接口(配置或通信)
  7. (71)FPGA模块调用(system Verilog调用VHDL)
  8. (24)打两拍verilog与VHDL编码(学无止境)
  9. oracle强制走索引_实验验证:Oracle聚簇因子对索引使用的影响
  10. python列表keys函数_字典常用函数(clear、get、items、keys、values、pop)