剛剛在上一篇中提到可能會寫TextField的應用,
想不到這麼快就開寫了,
果然Deadline就是最大生產力(快要把手上的MAC BOOK還人了)
下面是一個TextField應用的例子:
用慣手機的各位應該能發現別扭的地方吧。
對!就是鍵盤把TextField整個擋住了,
這要人怎麼編輯啊!QQ
這時就需要用到Delegate了,
有興趣可翻閱,
但為了節省各位看官的時間,
基本的應用還是會黏貼一份過來這邊,
解釋什麼還是省略了。
首先,要在Storyboard中派Viewcontroller作為TextField的Delegate
然後,在程式中選擇textFieldDidBeginEditing,
沒錯,上述的部分還是完全無法解決擋著TextField的問題,
因為有認真看CODE的會發現它只是改變了頁面的TITLE,
實際並沒什麼卵用。
但道理都是一樣的,就是在TextField開始編輯時做動作。
某君先貼出所有的CODE,方便各位預讀:
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軸是這樣的:
x軸的原點在左,越往右往大;
y軸的原點在上,越往下往大。
那上面CODE的實際效果就是醬紫:
整個往上提以後就不怕擋著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)呼喚它哦。
留言列表