第一个iOS程序

第一个iOS程序简介

  • 初学iOS开发,研究的程序不要过于复杂,应该从最基本的开始
  • 大房子都是由小砖一块一块堆成的,而大型app是由无数个小程序段组成的
  • 接下来实现一个简单的“加法计算器”,作为第一个iOS程序(Hello World)
  • 分析可得,至少需要开发步骤:

  1. 添加需要的控件,搭建UI界面:1个按钮、3个文本标签、2个文本输入框

  2. 监听按钮的点击事件

  3. 取得2个文本框值,将计算好的最终结果显示到右边的文本标签上

掌握

  • 往storyboard中添加控件

  • UIViewController和UIView的关系

  • 程序的运行过程

  • IBAction、IBOutlet的作用

  • 如何监听控件的事件(比如按钮的点击事件)

  • 父控件和子控件的概念

  • 退出键盘

作业

  • 制作一个QQ登录界面

  • 要求:

  1. QQ文本框要有“请输入QQ”的文字提示(用户输入文字时会自动消失)

  2. 密码文本框要有“请输入密码”的文字提示(用户输入文字时会自动消失)

  3. QQ文本框只能输入数字

  4. 密码文本框的文字必须是暗文显示

  5. 点击登录按钮后输出用户输入的QQ和密码,并且退出键盘

Storyboard文件

  • 在iOS5之前,苹果使用xib文件来描述UI界面

  • 在iOS5之后,苹果采取了更加强大和先进的storyboard文件来描述界面(Xcode5是基于iOS7的)           

  • 左边的箭头表明:程序一启动就会显示箭头所指的界面

UILabel – 文本标签

  • 文本标签的作用仅仅是显示一串固定的文字

UIButton – 按钮

  • 按钮的作用是:监听用户的点击事件,在用户点击后做出反应

UITextField – 文本输入框

  • 文本输入框可以弹出键盘,让用户输入一些具体的值

UIView

  • 屏幕上能看得见摸得着的东西就是UIView,比如屏幕上的按钮、文字、图片
  • 一般翻译叫做:视图\控件\组件
  • UIButton、UILabel、UITextField都继承自UIView
  • 每一个UIView都是一个容器,能容纳其他UIView(比如右图中的整个键盘是一个UIView,里面容纳很多小格子的数字UIView)

父控件和子控件

  • 在“加法计算器”中,最后面那块白色的全屏的东西也是一个UIView
  • 白色的大UIView中容纳了很多小的UIView,视图层次结构如下图所示
  • 在白色的大UIView中,容纳了6个小UIView(1个UIButton、2个UITextField、3个UILabel)

  • 这种情况下,我们可以称白色的大UIView为6个小UIView的父控件(父视图),6个小UIView都是白色大UIView的子控件(子视图)

UIViewController

  • 手机上自带的“设置”中有很多的界面,点击对应的选项可以跳到下一个界面
  • 每一个新的界面都是一个新的UIView,在切换过程中,涉及到了:

  1. UIView的创建和销毁

  2. UIView跟用户的交互(处理UIView内部每一行的点击)

  • 其实,每当显示一个新界面时,首先会创建一个新的UIViewController对象,然后创建一个对应的全屏UIView,UIViewController负责管理这个UIView

  • UIViewController就是UIView的大管家,负责创建、显示、销毁UIView,负责监听UIView内部的事件,负责处理UIView与用户的交互

  • UIViewController内部有个UIView属性,就是它负责管理的UIView对象 :

  1. @property(nonatomic,retain) UIView *view;
  • 严格来讲,下图箭头所指的应该是一个UIViewController对象,里面白色的界面仅仅是UIViewController内部的UIView属性

  • 箭头所指UIViewController的真实类型是MJViewController

加法计算器程序的运行流程

  • 综合分析,可以得出程序的简单运行流程:
  1. 读取Main.storyboard文件
  2. 创建箭头所指的MJViewController对象
  3. 根据storyboard文件中描述创建MJViewController的UIView对象
  4. 将UIView对象显示到用户眼前

如何监听按钮点击

  • 现在已经知道:应该由MJViewController来监听“计算”按钮的点击
  • 换句话说,MJViewController应该提供一个方法出来,当用户点击“计算”按钮时,就调用这个方法来通知MJViewController按钮被人点了
  • MJViewController就在这个方法中实现想做的任何事情,比如计算2个文本输入框内值的和

补充问题

  • IBAction和IBOutlet究竟有什么作用?
  • 还有其他拖线方式么?
  • Storyboard文件中箭头的含义?
  • 如何更换storyboard文件?
  • 如何让文本框只能输入数字?
  • 如何退出键盘?
  • Company Identifier和Bundle Identifier的作用
  • 模拟器还有哪些功能?
  • 特别提醒:iOS7和iOS6的区别

IBAction和IBOutlet

  • IBAction
  1. 从返回值角度上看,作用相当于void
  2. 只有返回值声明为IBAction的方法,才能跟storyboard中的控件进行连线
  • IBOutlet
  1. 只有声明为IBOutlet的属性,才能跟storyboard中的控件进行连线

设置程序启动时加载的storyboard

  • 这个设置表明:程序启动时会加载Main.storyboard

设置UITextField的键盘类型

  • 这个设置表明:UITextField弹出的是数字键盘

退出键盘的两种方式

  • resignFirstResponder
  1. 当叫出键盘的那个控件(第一响应者)调用这个方法时,就能退出键盘
  • endEditing
  1. 只要调用这个方法的控件内部存在第一响应者,就能退出键盘

02-第一个iOS程序的更多相关文章

  1. 从安装Mac OS X虚拟机到第一个IOS程序

    对于纯粹地抄这种行为是比较抵触的,别人已经写得挺好的东西没必要又去写一遍,但如果不写经验来看下次再做时自己又要重复百度筛选一遍,所以还是要记一记. 之前要获取IOS静态库的版本,但一直以来没有Mac没 ...

  2. 第一个iOS程序:Hello iOS

    今天我们来创建第一个iOS程序:Hello iOS!不需要写任何代码就能实现:

  3. 02-第一个iOS程序-开发步骤

    打开Xcode 选择项目模板 Single View Application是最适合初学者的模板 设置项目属性 运行程序 不管怎样,先运行第一个iOS程序看看效果先(用快捷键Command + R 也 ...

  4. [IOS]从零开始搭建基于Xcode7的IOS开发环境和免开发者帐号真机调试运行第一个IOS程序HelloWorld

    首先这篇文章比较长,若想了解Xcode7的免开发者帐号真机调试运行IOS程序的话,直接转到第五部分. 转载请注明原文地址:http://www.cnblogs.com/litou/p/4843772. ...

  5. 【IOS学习】1.第一个IOS程序

    1.执行原理 a.首先执行main函数 调用UIApplicationMain方法 return UIApplicationMain(argc, argv, nil, NSStringFromClas ...

  6. 轻量级应用开发之(01)第一个IOS程序

    一 IPhone轻量级开发 1. 开发环境 Mac 版本: OS X EICap 10.11.3 (15D21) XCode开发版本: Version 7.2.1 (7C1002) 2.简单分析 UI ...

  7. 一个iOS程序员眼中的跨域问题

    摘要: 跨域问题是web开发领域一个常见的问题,相信每个web开发者都遇到"跨域"的问题 最近公司的iOS开发任务比较少,所以自己最近开始了Web开发的任务,在用H5做了很多页面, ...

  8. 02第一个OC程序

    一.打开XCode4.6.3,新建项目 二.选择Application下的命名行项目 三.输入项目名称,选择Foundation框架创建项目,点击Next 四.二话不说.点击Run.启动我们创建的项目 ...

  9. 第一个ios程序

    1.ios的理解: Operating System,简称OS,操作系统,ios是苹果操作系统. 2.Xcode开发环境: 苹果公司开发的编程软件,是开发人员建立OS X 和 iOS 应用程序的最快捷 ...

随机推荐

  1. [Linq To Sql]解决join时的Collation冲突

    背景 现在两表 A:

  2. [转]Mysql几种索引类型的区别及适用情况

    此为转载文章,仅做记录使用,方便日后查看,原文链接:https://www.cnblogs.com/yuan-shuai/p/3225417.html Mysql几种索引类型的区别及适用情况   如大 ...

  3. [LeetCode]20. Valid Parentheses有效的括号

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  4. 深入理解java线程池—ThreadPoolExecutor

    几句闲扯:首先,我想说java的线程池真的是很绕,以前一直都感觉新建几个线程一直不退出到底是怎么实现的,也就有了后来学习ThreadPoolExecutor源码.学习源码的过程中,最恶心的其实就是几种 ...

  5. jsonp跨域&百度下拉

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Network Embedding 论文小览

    Network Embedding 论文小览 转自:http://blog.csdn.net/Dark_Scope/article/details/74279582,感谢分享! 自从word2vec横 ...

  7. python 多线程效果演示

    多线程演示 不使用多线程的情况 import threading import time def run(n): print("task ",n) time.sleep(2) ru ...

  8. PHP 数字转汉字函数

    /** * 数字转汉字描述 */ function numToStr($num) { // 判断正确数字 if (!preg_match('/^(\d*)(\.\d+)?$/', $num)) ret ...

  9. Python 基于固定 IP 来命名 ARM 虚拟机的实现

    问题描述 希望通过 Python 批量创建 ARM 虚拟机,并且在虚拟机命名时加入固定 IP 信息,方便管理维护. 问题分析 在创建 ARM 虚拟机之前,先创建固定 IP,然后获取固定 IP 地址,创 ...

  10. Laravel Service Provider 开发时设置延迟加载时遇到的问题

    因实际项目需求,近日在开发 laravel-database-logger 包的时候,发现设置 ServiceProvider defer 属性设置为 true 时,会导致在register 方法中注 ...