iOS菜鸟成长笔记(1)——第一个iOS应用
前言:阳光小强最近抽时间学习iOS开发,在学习过程中发现了很多有趣的东西也遇到了很多问题,为了在学习过程中能和大家交流,记录下学习的心得和学习成果,所以就有了这一个系列文章,希望这一系列文章能形成一个系统性的东西,让和我一样刚步入iOS开发的朋友少走弯路,用最少的时间获得最大的收益。既然是学习笔记,希望大家多提意见,如果你是iOS大牛多多拍砖。
说起iOS开发很多朋友就会望而却步,有一部分朋友可能是因为设备因素,有一部分朋友可能是因为编程语言是Objective-C的原因,因为这些迟迟没有拿起的iOS当你有一天进入它的世界,你就会发现其实是我们想多了,在Xcode上面开发iOS程序是非常方便快捷的,而且苹果开发者官网为我们提供了很多关于iOS开发的文档和文章,学习起来非常方便。
转载请说明出处:http://blog.csdn.net/dawanganban
一、着手开发IOS应用程序
(官网链接:https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOSCh/index.html#//apple_ref/doc/uid/TP40012668)
正如上图一样,这篇文章(https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOSCh/index.html#//apple_ref/doc/uid/TP40012668)介绍了iOS开发工具Xcode的基本使用和开发的基本步骤和过程,建议都能读一下。
iOS开发中使用的是MVC模型,这个对于做过java ee和Android的朋友来说已经很熟悉了,我们需要做的是把模型、视图、控制器和工程中的文件对应起来
下面我们先来新建一个iOS的项目
1、选择 Create a new Xcode project --> iOS --> Application --> Single View Application (选择单页面模板)
2、项目结构
如上图所示,我们先来看看 Supporting Files/main.m文件,这个大家一看就知道是整个应用的入口
#import <UIKit/UIKit.h>
#import "AppDelegate.h" int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
可以看到当我们的iOS应用运行的时候首先会执行UIApplication的UIApplicationMain方法,这个方法首先会创建UIApplication实例(这个和Android中的Application类似,是一个单例模式,整个应用程序只有一个实例,所以它的生命周期和我们的应用生命周期一致),接下来会在这里循环管理和处理应用事件。同时也会创建一个UIApplicationDelegate类的实例。该类是UIApplication的代理类,在该类中处理UIApplication委托的各种事件响应。
下面我们打开工程中的AppDelegate.h和AppDelegate.m文件
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @end
可以看到改代理类持有一个UIWindow的实例(属性)
#import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
} - (void)applicationWillResignActive:(UIApplication *)application {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
} - (void)applicationDidEnterBackground:(UIApplication *)application {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
} - (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
} - (void)applicationDidBecomeActive:(UIApplication *)application {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
} - (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
} @end
在实现中有6个方法,分别在应用程序的各个生命周期中调用。比如didFinishLaunchingWithOptions方法在应用程序加载完成后调用。
工程中的ViewController就是MVC中的控制器,视图就是screen.xib文件和storyboard中的界面。这里的ViewController继承自UIViewController相当于Android中的Activity,用来控制视图和模型的交互。
视图控制器并不是视图层的一部分,也不是界面中的元素,他管理者视图层的对象,并提供交互行为,如果有多个界面,我们就要为每一个界面定义一个视图控制器。
摘自官方文档 : “您还可以使用视图控制器来转换各种类型的内容。由于 iOS 应用程序显示内容的空间很有限,因此视图控制器提供了所需要的基础结构,可让您移除一个视图控制器的视图,替换为另一个视图控制器中的视图。通过让视图控制器文件与串联图中的视图进行通信,可以定义应用程序中的交互方式。方法是通过 Action 与 Outlet 来定义串联图与源代码文件之间的连接。”
下面通过一个简单的实例,我们就可以看到Action和Outlet的使用了。
二、拖放UI组件
打开Main.storyboard向其中拖放组件元素。
上面用到了 UITextField、UILabel、UIButton,有关这些组件的详细配置我觉得对于做过Android开发的朋友真心没必要花过多时间。
三、监听Button事件
ViewController.h (第6行代码)
#import <UIKit/UIKit.h> @interface ViewController : UIViewController //声明一个方法来监听按钮点击 IBAction === void
- (IBAction)btnOnClick; @end
ViewController.m (第15-17行代码)
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} #pragma mark 监听按钮点击
- (void)btnOnClick{
NSLog(@"按钮被人点击了");
} @end
按住control键,拖动Button到右边的 -(IBActon)btnOnClick处建立连接。
command+R运行观察结果,点击按钮会发现控制台打印出了Log
2015-03-14 11:10:11.820 第一个iOS程序[12810:142497] 按钮被人点击了
2015-03-14 11:10:12.004 第一个iOS程序[12810:142497] 按钮被人点击了
四、获取文本框对象
我们要获取文本对象,先要将文本对象作为ViewController的一个属性(第9、10行)
#import <UIKit/UIKit.h> @interface ViewController : UIViewController //声明一个方法来监听按钮点击 IBAction === void
- (IBAction)btnOnClick; //声明两个属性用来保存2个文本输入框
@property (nonatomic, weak) IBOutlet UITextField *num1;
@property (nonatomic, weak) IBOutlet UITextField *num2; @end
用同样的方法(按住control键拖动我们的文本对象建立连接),这样我们就可以取得文本对象的内容了
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} #pragma mark 监听按钮点击
- (void)btnOnClick{
NSLog(@"按钮被人点击了"); UITextField *textField1 = self.num1;
UITextField *textField2 = self.num2; NSString *text1 = textField1.text;
NSString *text2 = textField2.text; NSLog(@"文本1 = %@, 文本2 = %@", text1, text2); } @end
command + R ,在文本框内输入后点击按钮
控制台输出:
2015-03-14 11:33:07.342 第一个iOS程序[14531:166271] 按钮被人点击了
2015-03-14 11:33:07.343 第一个iOS程序[14531:166271] 文本1 = 12, 文本2 = 34
五、完成计算功能
用同样的方法添加UILabel的属性
#pragma mark 监听按钮点击
- (void)btnOnClick{
NSLog(@"按钮被人点击了"); UITextField *textField1 = self.num1;
UITextField *textField2 = self.num2; NSString *text1 = textField1.text;
NSString *text2 = textField2.text; NSLog(@"文本1 = %@, 文本2 = %@", text1, text2); double num1 = [text1 doubleValue];
double num2 = [text2 doubleValue]; double sum = num1 + num2; NSLog(@"文本和 = %f", sum); UILabel *resultLabel = self.result; resultLabel.text = [NSString stringWithFormat:@"%f", sum]; }
我们会发现输出结果后面是三个点,这个是因为我设置了长度超出省略,可以设置Line Breaks 为 Clip(截断)
最后再提一句:Objective-C是iOS的基石(核心)所以希望深入研究iOS开发的朋友建议加深对OC的学习,可以参考我的另外一个系列博客《Objective-C基础笔记》
iOS菜鸟成长笔记(1)——第一个iOS应用的更多相关文章
- iOS菜鸟成长笔记(2)——网易彩票练习
距离上一篇<第一个iOS应用>已经有一个多月了,今天来和大家一起学习和分享一下一个小练习<网易彩票> 首先我们向storyboard中拖入一个TabBarController和 ...
- iOS菜鸟成长笔记(3)——斯坦福公开课学习(1)
一.iOS四层结构 1.Core OS 是用FreeBSD和Mach所改写的Darwin, 是开源.符合POSIX标准的一个Unix核心.这一层包含或者说是提供了整个iPhone OS的一些基础功能, ...
- 菜鸟成长日记之新手备忘录-IOS开发第一个项目总结
2013年5月3号,开始找IOS开发工作(自学了大半年,做了一个功能不全的Demo,该出去见见世面了!),5月4号面试了第一家公司(是家刚成立一段时间的外包公司),5月5号第一家公司已二轮电话面试,5 ...
- ios学习总结(1) -- 创建第一个ios项目
原文地址 下载并打开xcode. 接着新建一个工程,如下图所示: 点击Create a new Xcode project,之后选择ios下的Application,点击Single View App ...
- Swift开发iOS项目实战视频教程(一)---iOS真简单
本课主要介绍iOS项目的创建.第一个iOS项目的开发.UILabel.UIButton的使用. 假设你看完此视频还认为iOS非常难,请你来找我! 本教程摒弃枯燥的语法和知识解说,全是有趣有料的项目实战 ...
- 【SwiftUI】学习笔记1-创建第一个iOS应用
本系列将会开发大量实际的项目. 系列为本人学习笔记,资料:<SwiftUI自学成长笔记>-刘铭 资源源代码下载资源:可以在gitee上下载,搜索刘铭即可. 第一章:创建项目 也可以在菜单栏 ...
- Android菜鸟的成长笔记(2)——第一个Android应用
原文:Android菜鸟的成长笔记(2)--第一个Android应用 上一篇:Android菜鸟的成长笔记(1)--Anddroid环境搭建从入门到精通 在上一篇Android菜鸟的成长笔记(1)中我 ...
- IOS开发学习笔记017-第一个IOS应用
第一个IOS应用程序,就从最简单的开始吧. 1.先了解一下开发环境,Xcode的相关组成 2.还有模拟器 3.运行与停止按钮 4.新建一个工程 5.看看main函数里都有啥 6.现在来添加一个控件 1 ...
- Android菜鸟的成长笔记(3)——给QQ登录界面说So Easy
原文:Android菜鸟的成长笔记(3)--给QQ登录界面说So Easy 上一篇:Android菜鸟的成长笔记(2)--第一个Android应用 我们前面已经做了第一个Android应用程序,虽然有 ...
随机推荐
- OpenJDK源码研究笔记(二)-Comparable和Comparator2个接口的作用和区别(一道经典的Java笔试面试题)
Comparable和Comparator是JDK中定义的2个比较接口,很相似,但又有所不同. 这2个接口的作用和区别也是Java中的常见经典面试题. 下面我们就来详细介绍下这2个接口的定义.作用.区 ...
- C++容器(五):set类型
set类型 map容器是键-值对的集合,好比以任命为键的地址和电话号码.而set容器只是单纯的键的集合.当只想知道一个值是否存在时,使用set容器是最适合. 使用set容器必须包含set头文件: #i ...
- COGS——T 1578. 次小生成树初级练习题
http://www.cogs.pro/cogs/problem/problem.php?pid=1578 ☆ 输入文件:mst2.in 输出文件:mst2.out 简单对比时间限制:1 ...
- LeakCanary:简单粗暴的内存泄漏检測工具
差点儿每一个程序猿在开发的过程中都会遇到内存泄漏.那么我们怎样检測到app是否哪里出现内存泄漏呢?square公司推出了一款简单粗暴的检測内存泄漏的工具-- LeakCanary 什么是内存泄漏? 内 ...
- 编译并使用boost库(win7+boost1.63+vs2015+32位or 64位),超详细,boost于vs2017下编译(64/32bit)
首先下载得到boost的最新版(目前最新版是1.63) 下载地址: http://www.boost.org 也可以从这里直接下载 http://download.csdn.net/detail/ ...
- ZoomIt(投影演示辅助软件)下载、安装与运行使用
下载ZoomIt后,打开即可使用:打开时,你讲看到如下的几个页面,这几个页面是为了介绍每个功能的使用,还可以去设定你觉得比较舒服的快捷键, 默认的是Ctrl+1屏幕放大.Ctrl+2屏幕标注,Ctrl ...
- mysql if使用实例
//DELIMITER DROP PROCEDURE if EXISTS createAmountCount; create PROCEDURE createAmountCount() BEGIN D ...
- css五种定位方式介绍
1.static定位(普通流定位) -------------- 默认定位 2.float定位(浮动定位) 例:float:left; 有两个取值:left(左浮动)和right(右浮动).浮动元素会 ...
- 5、Go if else 条件判断
package main import "fmt" func main(){ //注:在Go里面没有三元表达式”?:”,所以你只能使用条件判断语句. //示例一 if 7%2==0 ...
- Example of working with a dump.
Let's say that you are looking at a crash dump, so following the first command from this page you do ...