iOS开发UI篇—实现一个私人通讯录小应用【转】

转一篇学习segue不错的教程

一、该部分主要完成内容

1.界面搭建

                      

2.功能说明

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

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

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

二、实现过程和代码

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

实现代码:

YYloginViewController.m文件

  1 //
  2 //  YYloginViewController.m
  3 //  01-私人通讯录(登录页面搭建)
  4 //
  5 //  Created by apple on 14-6-6.
  6 //  Copyright (c) 2014年 itcase. All rights reserved.
  7 //
  8
  9 #import "YYloginViewController.h"
 10 #import "MBProgressHUD+NJ.h"
 11
 12 @interface YYloginViewController ()
 13 /**
 14  *  账户输入框
 15  */
 16 @property (weak, nonatomic) IBOutlet UITextField *numberField;
 17 /**
 18  *  密码输入框
 19  */
 20 @property (weak, nonatomic) IBOutlet UITextField *pwdField;
 21 /**
 22  *  登录按钮
 23  */
 24 @property (weak, nonatomic) IBOutlet UIButton *loginBtn;
 25 /**
 26  *  记住密码
 27  */
 28 @property (weak, nonatomic) IBOutlet UISwitch *rempwdSwitch;
 29 /**
 30  *  自动登录
 31  */
 32 @property (weak, nonatomic) IBOutlet UISwitch *autoLoginSwitch;
 33 /**
 34  *记住密码按钮
 35  */
 36 - (IBAction)rempwdChange:(id)sender;
 37 /**
 38  *自动登录按钮
 39  */
 40 - (IBAction)autoLoginChange:(id)sender;
 41 /**
 42  *登录按钮的点击事件
 43  */
 44 - (IBAction)loginBtnOnclick:(id)sender;
 45
 46 @end
 47
 48 @implementation YYloginViewController
 49
 50 - (void)viewDidLoad
 51 {
 52     [super viewDidLoad];
 53
 54     //监听文本输入框的改变
 55     //1.获得通知中心
 56     NSNotificationCenter *center=[NSNotificationCenter defaultCenter];
 57     //2.注册监听
 58     //注意:一定要写上通知的发布者,否则如果该界面上有多个文本输入框的话,都会响应
 59     //UITextFieldTextDidChangeNotification监听的事件:文本输入框的内容发生改变
 60     //self.numberField:监听的对象
 61     //textChange:当事件发生时调用的方法
 62     [center addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.numberField];
 63     [center addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.pwdField];
 64 }
 65
 66
 67 //监听文本输入框的状态,当两个文本输入框中都有值的时候,让登录按钮的状态变为可交互的
 68 -(void)textChange
 69 {
 70 //    if (self.numberField.text.length>0&&self.pwdField.text.length>0) {
 71 //        self.loginBtn.enabled=YES;
 72 //    }else
 73 //        //这里主要针对数据回删
 74 //        self.loginBtn.enabled=NO;
 75
 76     //可以改写为下面的写法
 77     self.loginBtn.enabled=(self.numberField.text.length>0&&self.pwdField.text.length>0);
 78 }
 79
 80 - (IBAction)rempwdChange:(id)sender {
 81 //1.判断是否记住密码
 82 //2.如果取消记住密码,则同时取消自动登录
 83     if (self.rempwdSwitch.isOn==NO) {
 84 //        self.autoLoginSwitch.on=NO;
 85         //设置动画效果
 86         [self.autoLoginSwitch setOn:NO animated:YES];
 87     }
 88 }
 89
 90 - (IBAction)autoLoginChange:(id)sender {
 91     //1.判断是否自动登录
 92     //2.如果自动登录,就记住密码
 93     if (self.autoLoginSwitch.isOn==YES) {
 94         [self.rempwdSwitch setOn:YES animated:YES];
 95     }
 96 }
 97 - (IBAction)loginBtnOnclick:(id)sender {
 98     //点击登录按钮,提示加载信息,并对账号和密码进行判断,如果正确就跳转到新的界面,如果不正确那就显示提示信息
 99     //这里使用了第三方框架
100     //在点击登录按钮后,添加一层蒙版以禁止用户操作,并且提示用户正在登录
101     [MBProgressHUD showMessage:@"正在努力加载....."];
102     //让后面的操作在3秒钟之后再执行
103     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
104         if (![self.numberField.text isEqualToString:@"YY"]) {
105             //登录操作后,取出蒙版
106             [MBProgressHUD hideHUD];
107             //输入账号不正确,则提示错误信息
108             [MBProgressHUD showError:@"输入的账号不存在!"];
109             return;
110         }
111         if (![self.pwdField.text isEqualToString:@"123"]) {
112             //输入密码不正确,则提示错误信息
113             [MBProgressHUD hideHUD];
114             [MBProgressHUD showError:@"输入的密码不正确!"];
115             return;
116         }
117          //如果密码和账号都正确的话,跳转到新的界面
118         //移除蒙版
119         [MBProgressHUD hideHUD];
120         //跳转到新的界面,使用segue(需要判断-手动)
121         [self performSegueWithIdentifier:@"login2contatc" sender:@"文顶顶"];
122     });
123 }
124 //在segue跳转之前会调用这个方法,会传入performSegueWithIdentifier方法创建好的segue对象
125 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
126 {
127     NSLog(@"%@",sender);
128     //数据的正向传递
129     //1.拿到目标控制器
130     UIViewController *vc=segue.destinationViewController;
131     //2.设置目标控制器的标题
132     vc.title=[NSString stringWithFormat:@"%@的联系人列表",self.numberField.text];
133
134     /*
135      // 执行segue的perform内部实现
136      UIViewController *sourceVc = segue.sourceViewController;
137      UINavigationController *nav = sourceVc.navigationController;
138      [nav pushViewController:segue.destinationViewController animated:YES];
139      */
140 }
141 @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:方法的完整执行过程

[self performSegueWithIdentifier:@“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)逆传:从当前控制器将数据传递给前面的控制器

原文链接:http://www.cnblogs.com/wendingding/p/3773603.html

时间: 2024-07-31 12:44:51

iOS开发UI篇—实现一个私人通讯录小应用【转】的相关文章

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

iOS开发UI篇—实现一个私人通讯录小应用(二) 一.实现功能说明 (1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作. 注意:注销按钮的单击事件已经进行了连线.实现-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex需要遵守UIActionSheetDelegate协议. 1 //注销按钮 2 - (IBActi

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

iOS开发UI篇—实现一个私人通讯录小应用(一) 一.该部分主要完成内容 1.界面搭建                        2.功能说明 (1).只有当账号和密码输入框都有值的时候,登录按钮才能交互 (2).当取消勾选记住密码后,自动登录按钮也随之取消:当勾选了自动登录按钮时,记住密码按钮也一同勾选. (3).点击登陆后,弹出蒙版,界面不可交互,程序能够简单判断账号和密码是否正确,如果不正确则给出相应的提示,如果正确则跳转到联系人列表界面. 二.实现过程和代码 项目文件结构图和界面搭建

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

原文  http://www.cnblogs.com/wendingding/p/3777087.html iOS开发UI篇—实现一个私人通讯录小应用(二) 一.实现功能说明 (1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作. 注意: 注销按钮的单击事件已经进行了连线.实现-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)butto

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

原文  http://www.cnblogs.com/wendingding/p/3773603.html iOS开发UI篇—实现一个私人通讯录小应用(一) 一.该部分主要完成内容 1.界面搭建                        2.功能说明 (1).只有当账号和密码输入框都有值的时候,登录按钮才能交互 (2).当取消勾选记住密码后,自动登录按钮也随之取消:当勾选了自动登录按钮时,记住密码按钮也一同勾选. (3).点击登陆后,弹出蒙版,界面不可交互,程序能够简单判断账号和密码是否正确

iOS开发UI篇—实现一个简单的手势解锁应用(基本)

iOS开发UI篇—实现一个简单的手势解锁应用(基本) 一.实现效果 实现效果图: 二.手势解锁应用分析 1.监听手指在view上的移动,首先肯定需要自定义一个view,重写touch began,touch move等方法,当手指移动到圈上时,让其变亮.可以通过button按钮来实现. 2.界面搭建 背景图片(给控制器的view添加一个imageview,设置属性背景图片) 九个按钮(把九个按钮作为一个整体,使用一个大的view来管理这些小的view,这些小的view就是9个button.如果使

iOS开发UI篇—实现一个简单的手势解锁应用(完善)

iOS开发UI篇—实现一个简单的手势解锁应用(完善) 一.需要实现的效果 二.应用完善 1.绘制不处于按钮范围内的连线 2.解决bug(完善) bug1:如果在began方法中通知view绘图,那么会产生bug.因为,当前点没有清空,在手指移开之后要清空当前点.可以在绘制前进行判断,如果当前点是(0,0)那么就不划线.或者在began方法中不进行重绘. bug2:无限菊花.自定义view的背景色为默认的(黑色),只要重写了drawrect方法,view默认的背景颜色就是黑色的,因为上下文默认的颜

iOS开发网络篇—实现一个视频播放客户端小应用(二)

转自:http://www.cnblogs.com/wendingding/p/3815211.html 一.实现视频播放功能 实现效果: 启动项目后,点击对应的cell,即可播放视频.     代码示例: 主控制器代码如下: 1 // 2 // YYViewController.m 3 // 01-文顶顶客户端 4 // 5 // Created by apple on 14-6-29. 6 // Copyright (c) 2014年 itcase. All rights reserved.

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

iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcarsgroup.h // 07-汽车展示(高级) // // Created by apple on 14-5-28. // Copyright (c) 2014年 itcase. All rights reserved. // #import <Foundation/Foundation.h> @

ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局 一.实现效果 二.使用纯代码自定义一个tableview的步骤 1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中