ボタンが押されたときにUITextField
を検証するターゲットアクションがあります。
// Get the text from the UITextField
NSString *nameStr = _name.text;
_name.rightView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"error.png"]];
[self.view addSubview:_name];
if (nameStr.length == 0)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Invalid Name"
message:@"You must enter a name."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
私のUITextField
は次のようにviewDidLoad
のビューに追加されます。
[self.view addSubview:_name];
RightView UIImageView
を表示するにはどうすればよいですか?
UITextField
フレームが欠落していないことを確認しますか?そして、rightViewMode
を設定していますか?
これは私が今書いた例で、うまく機能しているようです。
UITextField *rightField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 140, 50)];
rightField.backgroundColor = [UIColor redColor]; // For testing purpose
rightField.rightViewMode = UITextFieldViewModeAlways;// Set rightview mode
UIImageView *rightImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Tick_white_color"]];
rightField.rightView = rightImageView; // Set right view as image view
[self.view addSubview:rightField];
結果としてのティック画像は次のとおりです。
ソリューションSwift 3:
class CustomText: UITextField {
@IBInspectable var rightImage : UIImage?{
didSet{
self.rightView = UIImageView(image: rightImage)
// select mode -> .never .whileEditing .unlessEditing .always
self.rightViewMode = .always
}
}
}
For Swift 3. UITextField
のプレースホルダーテキストの前に画像を表示するには
func setPaddingView(strImgname: String,txtField: UITextField){
let imageView = UIImageView(image: UIImage(named: strImgname))
imageView.frame = CGRect(x: 0, y: 5, width: imageView.image!.size.width , height: imageView.image!.size.height)
let paddingView: UIView = UIView.init(frame: CGRect(x: 0, y: 0, width: 50, height: 30))
paddingView.addSubview(imageView)
txtField.leftViewMode = .always
txtField.leftView = paddingView
}
関数を呼び出すには
self.setPaddingView(strImgname: "mail", txtField: txtEmail)
Solutionwith @IBDesignable
andSwift 3
まず、このようにUITextField
に対して@IBDesignable
を作成できます。
@IBDesignable extension UITextField{
@IBInspectable var setImageName: String {
get{
return ""
}
set{
let imageView: UIImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
imageView.image = UIImage(named: newValue)!
self.rightView = imageView
self.rightViewMode = UITextFieldViewMode.always
}
}
注:getおよびset@IBInspactable
ブロックのポイントSwiftがゲッターとsetter一緒に。 getステートメントを使用する必要がないため、空の文字列が返されました。また、属性名にはButtonが含まれていますが、混乱することはありません。間違いです。
次に、UITextField
のStoryBoard
をクリックし、setAButtonImageName属性に特定の画像名を付けます。
次に、次の結果が得られます
もう1つの状況は、rightViewを作成してright marginのように見えることです。
これがスクリーンショットです。
UIView
をこのUIImageView
に追加するよりも、UIView
をcontainerとして使用できます。ここでは、右マージン、コンテナビューの幅、および「UIImageViews」の幅。
@IBInspectable var setImageName: String {
get{
return ""
}
set{
let containerView: UIView = UIView(frame: CGRect(x: 0, y: 0, width:50, height: self.frame.height))
let imageView: UIImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
imageView.image = UIImage(named: newValue)!
containerView.addSubview(imageView)
imageView.center = containerView.center
self.rightView = containerView
self.rightViewMode = UITextFieldViewMode.always
}
}
2つ以上のフィールドがある場合次に、このコードを試してください!それは私のために働いています。
dropDownImageViewForTextField1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
dropDownImageViewForTextField1.image = [UIImage imageNamed:@"dropdown_n_icon.png"];
dropDownImageViewForTextField2 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
dropDownImageViewForTextField2.image = [UIImage imageNamed:@"dropdown_n_icon.png"];
txtField1.rightViewMode = UITextFieldViewModeAlways;
txtField1.rightView = dropDownImageViewForTextField1;
txtField2.rightViewMode = UITextFieldViewModeAlways;
txtField2.rightView = dropDownImageViewForTextField2;
2つのことを確認してください
txtField.rightViewMode = UITextFieldViewModeAlways
imageView
ごとにtextField
を個別に