close

剛剛在上一篇中提到可能會寫TextField的應用,

想不到這麼快就開寫了,

果然Deadline就是最大生產力(快要把手上的MAC BOOK還人了)

 

下面是一個TextField應用的例子:

用慣手機的各位應該能發現別扭的地方吧。

對!就是鍵盤把TextField整個擋住了,

這要人怎麼編輯啊!QQ

 

這時就需要用到Delegate了,

相關的介紹在上一篇:[iOS][Xcode][Swift]iPhone手機編程--Code與Storyboard的幾種連結ViewContronller, Object, Delegate, MVC, Segue, CoreData

有興趣可翻閱,

但為了節省各位看官的時間,

基本的應用還是會黏貼一份過來這邊,

解釋什麼還是省略了。

 

首先,要在Storyboard中派Viewcontroller作為TextField的Delegate

然後,在程式中選擇textFieldDidBeginEditing,

沒錯,上述的部分還是完全無法解決擋著TextField的問題,

因為有認真看CODE的會發現它只是改變了頁面的TITLE,

實際並沒什麼卵用

但道理都是一樣的,就是在TextField開始編輯時做動作。

某君先貼出所有的CODE,方便各位預讀:

image

 

STEP 1: 

    //當開始在TextField中編輯時,在TITLE顯示沒什麼卵用的"Editing",並且整個View向上移動

    func textFieldDidBeginEditing(_ textField: UITextField) {

        self.title="Editing"

        if self.view.frame.origin.y==0{

            self.view.frame.origin.y-=200

        }

    }

翻譯一下:

self: View

self.view.frame.origin.y: 頁面原始的y

整句的意思就是:當頁面y軸的原點是0時,將其-200,即-200。

那x, y軸又是怎樣的呢?

和數學的有少許差別,SWIFT的x, y軸是這樣的:

image

x軸的原點在左,越往右往大;

y軸的原點在上,越往下往大。

那上面CODE的實際效果就是醬紫:

image

整個往上提以後就不怕擋著TextField了,至於具體要上提多少,就要根據你的APP自己試了。

STEP 2: 

    //當用戶輸入完畢(按RETURN)時,將並沒什麼卵用的"Editing"刪除,並且將整個View移動回本來的位置

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {

        self.title=""

        if self.view.frame.origin.y<0{

        self.view.frame.origin.y=0

        }

        return true //SWIFT設定的textFieldShouldReturn Function必須要返回邏輯值

    }

那麼效果就是這樣的:

 美 

等等,為什麼再點TextField時,頁面不會再次上縮呢?

看看,遊標一直在TextField中,並沒有消失過,

換句話說,TextField一直在編輯中,那又哪來的開始編輯呢?

所以就需要用resignFirstResponder()來告訴View,TextField已經不再是我們的優先選項了!

那應該在什麼時候告訴它呢?

就是在用戶點一點其他地方的時候,

這是就需要用到Gesture(手勢)中的Tap(Click)了,

Gesture的內容也很多,

有機會某君可能也會開新篇(應該並沒有這個機會⋯⋯),

反正也是大同小異的,

先看下去吧。

STEP 3: 加入Tap(Gesture)並連結到ViewController.swift:

記得這裡的Tap是直接拉到View上的,所有的Gesture都是需要用在哪裡就拉到哪裡的。

如果不知道怎樣把Tap和TextField連結到ViewController.swift的話,真的要參考上篇了,這就不再浪費篇幅了。

STEP 4: 

    //當用戶點在頁面除TextField外的其他地方時,將TextField FirstResponder的職務解除,並將其他復原

    @IBAction func respondtoTap(_ sender: UITapGestureRecognizer) {

        self.title=""

        if self.view.frame.origin.y<0{

        self.view.frame.origin.y=0

        }

        text.resignFirstResponder() //這裡的text是TextField在CODE中的名字

    }

這樣就真的成功了!:

P.S. 如果Simulator不自動彈出鍵盤的話,可隨時按Command+K (Keyboard)呼喚它哦。

arrow
arrow

    4ngus 發表在 痞客邦 留言(0) 人氣()