2017-05-16 13 views
0

テキストフィールドの右側のビューとして[パスワードを忘れた場合]ボタンを追加しようとしています。テキストフィールドにはカスタムスタイルがあり、ボタンにも適用する必要があります。そのため、ボタンはテキストフィールドの内側にある必要があります。UITextField内のテキストを変更するUIButton

は、私がこれまで持っていることはこれです:

let forgotPasswordButton = UIButton() 
forgotPasswordButton.setTitle("Forgot", for: .normal) 
forgotPasswordButton.addTarget(self, action: #selector(forgotPassword), for: [.touchUpInside]) 

passwordTextField.rightView = forgotPasswordButton 
passwordTextField.rightViewMode = .always 

問題がある、私のボタンが見えません。いくつかのグーグルの後、私は.zeroで初期化するのではなく、ボタンにフレームを設定する必要があることに気付きました。しかし、そこの問題は、ボタンのタイトルがローカライズされているため、幅が異なります。

この問題を回避するにはどうすればよいですか?

答えて

1

あなたはNSStringのメソッドのサイズからサイズを取得する必要があります

// Create Label 
let forgotPasswordButton = UIButton() 
forgotPasswordButton.backgroundColor = .red 

// Title and font 
let title = "Forgot my wallet in the appartment" 
let font = forgotPasswordButton.titleLabel?.font 

// Set title 
forgotPasswordButton.setTitle(title, for: .normal) 

// Get size of title 
let fontAttributes = [NSFontAttributeName: font] 
let size = (title as NSString).size(attributes: fontAttributes) 

// Set frame using found size 
forgotPasswordButton.frame = CGRect(origin: .zero, size: size) 

その後、あなたのサイズとあなたのロジックを実行します。

`` `

override func rightViewRect(forBounds bounds: CGRect) -> CGRect { 
     var rect = super.rightViewRect(forBounds: bounds); 
     rect.size.width = rect.size.width*2; 
     rect.size.height = rect.size.height*2; 
     return rect; 
    } 

` ``
Uはあなたの必要性によってカスタムRECTことができます:UはUITextFieldのベースのカスタムクラスを作成し、このように、このセレクタを上書きすることができます

+0

はい、ラベルを縮小したくないので、フォントサイズをそのままのままにして、テキストフィールドの右側に多少のスペースを取りたいと思います。 – Banana

+0

申し訳ありません。理解できませんでした。私は私の答えを更新しました。 –

-2

この方法では;

+0

これは、ボタンのタイトルのテキストに基づいて正確な幅を持つという問題を解決しません。 – Banana

+0

ボタンの幅をボタンのタイトルで取得し、この方法でボタンの幅を設定することができます。 – Kira

関連する問題