2016-10-30 8 views
0

Xcodeのバージョンを8にアップグレードしても、swift2.3のswift2.3をswift3に修正しているという問題がたくさんありました。私の問題の1つは、すべてのカスタムUITextfieldは、私のプロジェクトで空白を表示するものとして全く機能しません。以下は私のカスタムUITextfieldとswift3で正しく表示されるように修正する方法です。UITextfield内のフレームサイズが正しくないswift3のサブクラス

enter image description here

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 
    } 
} 
+0

'てみましょうovTxtFld = OvalTextField(フレームとしてcornerRadiusを設定した場合

self.layer.cornerRadius = 2

、あるいはまた、より良いに置き換えます:CGRect(X:0 、y:20、width:200、height:20)) self.view.addSubview(ovTxtFld) ' –

+0

私はそのカスタムUITextfieldをstoryboardに追加しましたしたがって、上記のコードはまったく必要ありません。 – ppshein

+0

あなたの質問は何ですか? –

答えて

2

TextField cornerRadiusを設定しながら、あなたは間違ったフレームサイズを取得しているので、ストーリーボードからのフレームを取得しています。

コーナー半径の設定中にエラーが発生しました。

self.layer.cornerRadius = self.frame.size.height/2 

あなたがdrawRectメソッドをオーバーライドし、

override func draw(_ rect: CGRect) { 

    self.layer.cornerRadius = rect.size.height/2 

} 
+0

excellent ... !!! – ppshein

関連する問題