Xcodeバージョンを8にアップグレードすると、swift2.3バージョンのほとんどをswift3に修正しているという問題がたくさん見つかりました。私の問題の1つは、すべてのカスタムUITextfieldが、プロジェクトで空白を表示するためにまったく機能しないことです。以下は私のカスタムUITextfieldとswift3で正しく表示されるように修正する方法です。
import UIKit
class OvalTextField: UITextField, UITextFieldDelegate {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
createBorder()
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let finalString = textField.text! + string;
if (finalString != "") {
textField.rightView?.isHidden = true
}
return true
}
required override init(frame: CGRect) {
super.init(frame: frame)
createBorder()
}
func createBorder(){
let errorImg = UIImageView (frame: CGRect(x: 0, y: 0, width: 30, height: 30))
errorImg.image = UIImage(named: "error")
errorImg.contentMode = UIViewContentMode.left
self.delegate = self
self.layer.borderWidth = 1.0
self.layer.borderColor = UIColor(red:0.93, green:0.93, blue:0.93, alpha:1.0).cgColor
self.layer.cornerRadius = self.frame.size.height / 2
self.layer.masksToBounds = true
let gapLabel = UIView (frame: CGRect(x: 60, y: 0, width: 20, height: 40))
self.leftView = gapLabel
self.leftViewMode = UITextFieldViewMode.always
/* Display that one when validation is failed */
self.rightView = errorImg;
self.rightViewMode = UITextFieldViewMode.always
}
}
TextField
ストーリーボードからフレームを取得しているため、cornerRadiusの設定中に誤ったフレームサイズが取得されます。
コーナー半径の設定中にエラーが発生しました。
self.layer.cornerRadius = self.frame.size.height / 2
これを次のように置き換えます
self.layer.cornerRadius = 2
または、drawRect
メソッドをオーバーライドしてcornerRadiusを次のように設定するとさらに良い
override func draw(_ rect: CGRect) {
self.layer.cornerRadius = rect.size.height / 2
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加