『FoodTracker』(一)

实际上这是在学习一个XCode上的一个教程,这个教程演示了做一个名为『FoodTracker』的Dome。
语言版本:Swift2.0
XCode版本:7.3

Here We Go!

把 UI 稍微做一下

在 StoryBoard 拖几个组件进去:一个Label、一个TextField、以及一个Button。这就是暂时需要的所有东西,设置好约束,让它们竖着排成一列就好,样式什么的,暂时随便设置一下就行了,这里让我比较疑惑的是:教程中把这三个组件都放到了 StackView 里去了,这个东西我还从来没有用过,不过暂时也不会造成什么影响,先继续看下去。

先实现个小功能

在Storyboard 里,先把LabelTextField组件使用 Control-drag 大法拉到 ViewController.swift文件中,分别设置变量名为:mealNameLabel 和 nameTextField。这时候他们的标记是@IBOutlet
再把button也Control-drag过来,取函数名为setDefaultLabelText,不同的是这个的connection 要选 action,并将type设置为UIButton,它的标记是@IBAction
(『IB』是『Interface Builder』的缩写哦。)
Button按钮既然链接的是个 Action,那么肯定是要做点什么的嘛,在这里我们写一个方法,作用是让使用者点击这个Button后,把 在Label组件里显示的内容设置为一个我们想要的东西,在这里我们就设置为这样的一个字符串好了:"Cheri is good"。写起来也很容易,像下面这样:

 @IBAction func setDefaultLabelText(sender: UIButton) {
        mealNameLabel.text = "Cheri is good"
    }

还记得我们给Label组件起名为mealNameLabel吧,只需要把我们想设置的字符串赋予mealNameLabel.text就行啦。

使用代理

接下来我们要做的事情是这样的:在TextField中输入一些东西,然后让Label组件显示我们输入的东西。
为了完成这个需求,我们需要用到代理(delegate)。
ViewController.swift文件中有一部分自动生成的代码:

 override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

我们需要在super.viewDidLoad()这一句的下面加上我们对代理的使用:

        nameTextField.delegate = self

使用这行代码,我们就能通过对delegate的调用来处理 TextField组件的内容。

首先我们需要在override func vieDidLoad(){}方法后面加上两个方法,像这样:

 override func viewDidLoad() {        super.viewDidLoad()
        //通过 dalagate 的回调,处理 TextField 输入的内容
        nameTextField.delegate = self
    }
    
    // MARK: UITextFieldDelegation
    func textFieldShouldReturn(textField:UITextField) -> Bool {
    }
    
    func textFieldDidEndEditing(textField:UITextField) {
           }

其中TextFieldShouldReturn方法需要对textField使用resignFirstResponder()以取消其第一反馈者的身份。
textFieldDidEndEditing方法则是将用户在textField组件中输入的内容传递给Label组件。
实现后,看上去是这样的:

// MARK: UITextFieldDelegation
    func textFieldShouldReturn(textField:UITextField) -> Bool {
        //Hide the keyboard
        textField.resignFirstResponder()
        return true
    }
        
    func textFieldDidEndEditing(textField:UITextField) {
        mealNameLabel.text = textField.text
    }

这样一来,第一个小功能就实现了:在TextField中输入内容,按回车后,输入的内容会显示在Label 中,点击button后会把Label中的内容设置为默认值(cheri is good)。
千万不要忘记了给代码最开始的class ViewController后面加上一个UITextFieldDelegate类型像这样:

class ViewController: UIViewController, UITextFieldDelegate {}

全部代码如下:

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var nameTextField: UITextField!
    
    @IBOutlet weak var mealNameLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        //通过 dalagate 的回调,处理 TextField 输入的内容
        nameTextField.delegate = self
    }
    
    // MARK: UITextFieldDelegation
    func textFieldShouldReturn(textField:UITextField) -> Bool {
        //Hide the keyboard
        textField.resignFirstResponder()
        return true
    }
    
    func textFieldDidEndEditing(textField:UITextField) {
        mealNameLabel.text = textField.text
    }

    
    // MARK: Actions
    
    @IBAction func setDefaultLabelText(sender: UIButton) {
        mealNameLabel.text = "Cheri is good"
    }
}

这个程序可以从这个链接下载到

Comments
Write a Comment