Day#06 新增

前言

昨天已经在storyboard上将tableView连结上程序中的table,不过并没有解释到比较仔细原理的部分。今天回归到controller程序面,因此会稍加解释想要加上tableView的流程,与画面/程序两边的逻辑。

ViewController

Table

@IBOutlet var table: UITableView!

这是在一开始我们就先写在ViewController里的。
其中的惊叹号,回顾一下第2天的swift 101有讨论到强制取值,这边表示table在之後逻辑中,不需要再额外加上!就会自动取值。

而前缀@IBOutlet与待会使用到的@IBAction则是有以下的功能 :arrow_down:
IBOutlet:建立一个变数(Var),来存取或修改画面上的元件(Object)。 IBAction:建立事件发生时所要执行的Function。不是每一个元件(Object)都可以拉Action,只有继承UIControl的元件(Object)才可以建立Action,例如Label就无法建立,因为Label只是用来显示,并不会有任何触发动作
因此,我们昨天才可以将tableView跟viewController中的table bind起来。

Button

@IBAction func didTapAddButton()

那此时我们新增一个方法,希望点下右上方加号的时候可以进行新增的动作。

回到storyboard,如上,一样的逻辑,我们可以右键点选画面上方左边的变数设定选项,进而将button与action连结。

more viewControllers: editing, deleting

除了新增,还有浏览、以及删除的功能,因此我们再来新增两个view controller。找到後直接拖拉到画面中,或是click两下/按下enter也可以。

相对应的,我们也要新增两个view controller
可使用以下路径去新增

File > New > > File > Cocoa Touch Class > Subclass of UIViewController

分别取名为如下

  • EntryViewController
  • ViewViewController

EntryViewController

import RealmSwift
import UIKit

class EntryViewController: UIViewController, UITextFieldDelegate {

除了继承UIViewController,我们也加上UITextFieldDelegate,以使得text的委派对象成为自己。如此一来,当按下return键的时候,就可以离开键盘。

    var textField: UITextField!
    @IBOutlet var datePicker: UIDatePicker!
    
    private let realm = try! Realm()
    public var completionHandler: (() -> Void)?

接下来根据realm提供的官方方法进行default连线,拿到资料库的reference
completionHandler要做的事是新增後让list知道新增了一个item,然後重新拿资料。

    override func viewDidLoad() {
        super.viewDidLoad()

        textField.becomeFirstResponder()
        textField.delegate = self
    }

因为我们希望一新增的时候可以直接将游标指定到第一栏,因此在载入的时候就把textField设定为first responder。
也就是说,如果有多个textField,可以设定离开时将下一个textField指定为first responder。

接着,必须再实作一个方法textFieldShouldReturn,并resign first responder,当结束输入的时候把keyboard拿掉。

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        
        return true
    }
    
    @IBAction func didTapSaveButton() {
        
    }
    
}

当然,也先把按下储存按钮的方法框写起来。

结语

写了约莫一周,原先以为一个简单的to-do list两天就可以做完XD
结果到了开发第5天连个基本的CRUD都还没做出来,哈哈~
觉得mobile很多的工具我都不熟悉,因此现在只能看一个学一个,不知道如果当初选obj-c会发生什麽事情XDDD

明天会再回到storyboard,如果有任何文章上的建议,不管是我个人学习或开发上的,都欢迎留言给我。谢谢~(•͈⌔•͈⑅)

参考资源

  1. 『简易说明Xcode』IBOutlet 和 IBAction,用 Text Field、Segmented Control与Switch说明示范
  2. #44 利用 becomeFirstResponder 练习键盘的显示

<<:  配置 Promethues 与 Grafana

>>:  [Day 06] 特徵图想让人分群 ~模型们的迁移学习战~ 第一季 (迁移学习)

Day2 Python 基础教学 (一)

在学习 Python 之前,我们需要先安装好这个语言, 这边准备了三个作业系统的安装方式。 MacO...

Day05 - GCP 上的开发工具 Cloud Shell

Cloud Shell 介绍 Cloud Shell 是 GCP 提供的命令列介面,只要用浏览器就能...

[Day09] 第九章-Laravel 操作心得及资料来源补充

前言 经过昨天一连串得技术 跟程序轰炸 今天想分享一些使用laravel的心得 并且总结昨天的技术 ...

WordPress 适用响应式(RWD)浏览图片灯箱效果外挂-WP Lightbox 2

WP Lightbox 2 是一款支援图片灯箱效果,点图放大附关闭功能的外挂,适合在响应式网页上使用...

Day21 Android - Retrofit(Post)

昨天所说的(Get)主要用於取得api的资料,像是昨天https://jsonplaceholder...