最近因為研究到 需要能夠即時拖曳來拖曳去的textfield, 所以研究了一下, 一研究就整天沒了..寫下筆記希望以後能提醒自己 (寫的時候是用swift 2.2 & xcode 7.3.1)
由於UITextField 一旦被點下之後,鍵盤馬上就會跳出來, 不管你在touchesBegan 方法裡面寫什麼都沒有用..
異想天開的以為 在這個UITextField上面一個View在疊上一個View不就好了? 測試結果是,即便真的試出來(UIButton 和UITextField 確實可以疊加在上面這個UITextFieldf上) 但是UIView不知道為什麼,在self.view上面看起來是疊了,可是他依然進不了 touchesBegan裡,我給的 CGRectContainsPoint() 方法, 只會辨認出
touchesMoved 裡的 CGRectContainsPoint()
所以到底怎麼做出1. 在那個textField 裡按(不放) 可以拖曳
2. 在textField 裡按下(不移動) 放開 可以編輯
為了解決這個問題,除了原有的tf:UITextField之外
還要有lb:UILabel
跟willMove:Bool
和willEdit:Bool
(假設我們先把這個textField 加到self.view上)
最終我想到的方式就是 touchesBegan 裡 CGRectContainsPoint() 偵測到point 的話, 就設定willMove和willEdit 為true (因為不確定要拖曳還是要輸入文字) , 然後 在touchesMoved 裡如果willMove為true(表示要拖曳) 這時把 把tf.text(記得拆包) 傳給 lb.UILabel.text, 然後tf就功成身退 可以被removeFromSuperView了 ,但也記得把lb addSubview 進來才能完成這個第一功能,然後 讓 lb 座標 隨著動point 座標滑動 ,最後把willEdit設定為false (因為拖曳就不會進入編輯模式 )
完成第二個task 需要在touchesEnded 裡面 判斷 如果 willEdit為true,且 touch end 的point 在textField的話,那麼就把lb.text 傳給tf.text (同樣的,lb.text要記得拆包) 然後和前面一樣,該remove的還有addSubview的都不要漏掉
如此一來就可以做到 看起來像是可以拖曳的textField了 (希望以後學到其他更高階一點的方法)
沒有留言:
張貼留言