2017-01-03 74 views
0

我的視圖控制器中有多個UITextField,它也是一個文本字段委託。出於某種原因,以下代碼僅在沒有任何選中之後選擇文本字段時才起作用。如果我在文本字段之間切換,那麼我要離開的文本字段會發生變化,但我正在編輯的字段不會變爲紅色。我調試並發現,即使在兩者之間切換時也調用這兩種方法,但出於某種原因,它不會爲您正在編輯的那個設置顏色。任何幫助是極大的讚賞。謝謝!如何在編輯時更改UITextField

func textFieldDidBeginEditing(_ textField: UITextField) { 
    self.setTextBorder(textField: textField, color: UIColor.red) 
} 

func textFieldDidEndEditing(_ textField: UITextField) { 
    self.setTextBorder(textField: textField, color: UIColor.lightGray) 
} 

func setTextBorder(textField: UITextField, color: UIColor) { 
    let border = CALayer() 
    let width = CGFloat(2.0) 
    border.borderColor = color.cgColor 
    border.frame = CGRect(x: 0, y: textField.frame.size.height - width, width: textField.frame.size.width, height: textField.frame.size.height) 
    border.borderWidth = width 
    textField.layer.addSublayer(border) 
    textField.layer.masksToBounds = true 
} 

編輯

我現在創建一個自定義的類來測試,看看問題是,我不斷添加子層的事實。我得到了同樣的結果。這是自定義文本字段級的我做:

class SpecialTextField: UITextField { 

    var currentBorder: CALayer? 

    func setTextBorder(color: UIColor) { 
     let border = CALayer() 
     let width = CGFloat(2.0) 
     border.borderColor = color.cgColor 
     border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height) 
     border.borderWidth = width 
     if (currentBorder == nil) { 
      self.layer.addSublayer(border) 
      self.layer.masksToBounds = true 

     } else { 
      self.layer.replaceSublayer(self.currentBorder!, with: border) 
     } 
     self.currentBorder = border 
    } 

} 
+0

當您前後改變焦點時,您不斷向給定的文本字段添加越來越多的圖層。 – rmaddy

+0

@rmaddy這是真的。但是,我不相信這種方法可以起作用。 – Kendel

+0

@rmaddy我已經更新了我試圖避免重複添加更多圖層的問題。同樣的結果。 – Kendel

回答

0

爲了設置初始邊框顏色,我使用了viewDidLayoutSubviews(),這是導致問題的原因。它正在覆蓋我在編輯過程中改變的圖層。

0

你應該改變文字顏色

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 
    { 
     // textfield.backgrounColor = UIColor.yourselectedcolor 
     return true 
    } 

然後恢復顏色回endEditing委託方法。

+0

這沒有幫助。這只是讓它在開始輸入字符時改變背景。無論如何,同樣的問題仍然存在。出於某種原因,在文本視圖之間切換時會發生一些不允許我更改圖層的奇怪現象。 – Kendel

+0

你使用任何一種鍵盤庫?處理項目中的鍵盤? –

+0

我認爲你應該嘗試調度,如果功能正在調用,但用戶界面不會在當前時間更新。 –

相關問題