iOS编程:学习篇(一)

chapter 1

虽然从事C语言开发BIOS工作,但是依旧被面向对象的快捷方便所吸引。
接下来静下心来,准备学习学习iOS编程,希望来年能够从事iOS开发工作,希望能够做一个愉快的码农,并且能够继续深入研究数据结构和算法。

摒弃速成的培训班视频,入手老美的一本《iOS编程》,从点滴做起,犹如当初学习C语言,对Objective-C保持热情!

在成为iOS程序员,必须克服三道难题:
- 必须学会Objecitve-C语言。
- 必须掌握Cocoa的常用技术。
- 必须掌握框架(framework)。

第一个简单的iOS应用

首先尝试编写一个简单的iOS应用——Quiz。功能如下:在视图显示一个问题,用户点击视图下方的按钮,可以显示相应的答案,用户点击上方的按钮,则会显示一个新问题。
两个基本问题:
1. 如何创建并设置对象
2. 如何处理用户交互

MVC模式

  • 视图对象是用户可以看见的对象。在Quiz应用中,显示问题和答案的标签以及标签下方的按钮都是视图对象。
  • 模型对象负责存储数据,与用户界面无关。Quiz应用中的模型对象是两个包含字符串对象的数组:questions数组和answers数组。
  • 控制器对象用于控制视图对象为用户呈现的内容,以及负责确保视图对象和模型对象的数据保持一致。

    Quiz

  • 四个视图对象:两个UILabel对象和两个UIButton对象

  • 两个控制对象:AppDelegate和QuizViewController的对象各一个
  • 两个模型对象:NSArray对象两个
    tips:对于delefate的用法还有些疑问?

首先从.xib文件学习拖控件开始:
构建项目时,所有XIB文件都会被编译为NIB文件,然后Xcode会将NIB文件拷贝至应用的程序包中。程序包其实就是目录,其中包含应用的可执行文件和其会用到的所有资源文件。
通过在XIB文件拖动控件(在Interface Builder一种可视化编辑器,可以用拖动对象的方式来创建图形用户界面),已经简单将view界面建立起来了,但是现在他还不具有任何功能,接下来我们需要将QuizViewController和视图关联起来。

关联,一个对象可以知道另一个对象在内存的位置,从而使这两个对象协同工作。

  • 插座关联(outlets):指向对象的指针
  • 动作(actions):一种方法,这种方法在视图对象和用户对象发生交互时会被调用
// 声明一个插座变量,指向一个UILabel对象。IBOutlet关键字告诉Xcode之后会使用Interface Builder关联该插座变量。
@property (nonatomic, weak) IBOutlet UILabel *questionLabel;
@property (nonatomic, weak) IBOutlet UILabel *answerLabel;

声明动作方法:showQuestion:showAnswer:

 // IBAction关键字告诉Xcode之后会使用Interface Builder关联动作
- (IBAction)showQuestion:(id)sender{
    // 进入下一个问题
    self.currentQuestionIndex++;

    // 是否已经回答完所有的问题?
    if(self.currentQuestionIndex == [self.questions count]){
        self.currentQuestionIndex = 0;
    }

    // 根据正在回答的问题序号从数组中取出问题字符串
    NSString *question = self.questions[self.currentQuestionIndex];

    // 将问题字符串显示在标签上
    self.questionLabel.text = question;

    // 重置问题的答案是什么?
    self.answerLabel.text = @"???";
}

- (IBAction)showAnswer:(id)sender{
  // 当前问题答案是什么?
    NSString *answer = self.answers[self.currentQuestionIndex];

    // 在答案标签上显示相应答案
    self.answerLabel.text = answer;
}

创建模型对象

// 为了确保用户在看到应用界面时,数组已经存储了所需的问题和答案,必须在QuizViewController对象创建完毕之后立即创建数组。
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    // 调用父类实现的初始化方法
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if(self){
        // 创建两个数组对象,存储所需的问题和答案,同时,将questions和answers分别指向问题数组和答案数组
        self.questions = @[@"From what is cognac made?",
                           @"What is 7+7?",
                           @"What is the capital of Vermont?"];
        self.answers = @[@"Grapes",
                         @"14",
                         @"Montpelier"];
    }
    return self;
}

屏幕上显示视图控制器

已经成功将两个Label和两个Button和ViewController关联起来,但是为了在屏幕上显示用户界面,必须将视图控制器和应用中另一个控制器关联(AppDelegate)。
重点:在使用Xcode开发iOS应用时,所有的应用模板都会自动帮读者创建一个应用程序委托,它是每一个iOS应用都必须具备的启动入口。应用程序委托负责管理应用的UIWindow对象。UIWindow对象表示应用唯一的根视图控制器(root view controller)。

在AppDelegate中application: didFinishLaunchingWithOptions:这条消息添加应用的初始化代码。

    QuizViewController *quizVC = [[QuizViewController alloc] init];
    self.window.rootViewController = quizVC;

ok!大功告成!

Quetion:对于显示分辨率不正确的问题还有待继续学习!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值