输入右视图UIImageView到UITextField

时间:2013-10-08 06:38:49

标签: ios uiimageview uikit uitextfield ios7

我有一个目标操作,当按下按钮时,我会验证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

6 个答案:

答案 0 :(得分:26)

您必须设置文本字段的rightViewMode,因为此属性的默认值为 UITextFieldViewModeNever

所以你必须从下面设置模式,

   UITextFieldViewModeWhileEditing,
   UITextFieldViewModeUnlessEditing,
   UITextFieldViewModeAlways

答案 1 :(得分:24)

您确定没有错过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];

这是勾选图像的结果:

Right image view

答案 2 :(得分:3)

Swift 3中的解决方案:

class CustomText: UITextField {
    @IBInspectable var rightImage : UIImage?{
        didSet{
            self.rightView = UIImageView(image: rightImage)
            // select mode -> .never .whileEditing .unlessEditing .always
            self.rightViewMode = .always
        }
    }
}

答案 3 :(得分:3)

对于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)

enter image description here

答案 4 :(得分:0)

如果您有两个或更多字段,请尝试使用此代码!它为我工作。

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件事

  1. txtField.rightViewMode = UITextFieldViewModeAlways
  2. 为每个imageView
  3. 分隔textField

答案 5 :(得分:0)

解决方案 _ _ % _ _ % % _ _ _ _ % % _ % % % _ % % % % _ _ % % % _ % % % _ _ % % % _ _ % % % _ % % % _ _ % % % _ _ % % % _ _ % % _ _ % % % _ _ % % % _ _ % % _ _ % % % % _ _ % % % _ % % % _ % % % _ _ % % % _ _ % % % _ % % % _ % % % % _ % % % _ % % % % _ _ % % % _ _ % % _ _ % % % _ _ % % % _ _ % % _ _ % % % _ _ % % % _ _ % % _ _ _ % % _ _ _ % % _ _ % % _ _ % % % _ _ % % % _ _ % % _ % % % % % % % % % % % % % % % % % % _ % % % % _ Swift 3

首先,您可以为此@IBDesignable创建@IBDesignable

UITextField

注意:您必须为@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 } } 阻止写获取设置点,因为 Swift 已警告将getter和 setter 一起应用。我们不需要使用get语句,因此返回空字符串。此外,属性名称包含Button但不会混淆,这是一个错误。

然后点击@IBInspactable上的UITextField,并将特定图片名称指定给 setAButtonImageName 属性。

enter image description here

然后你会得到以下结果

enter image description here

另一种情况是创建rightView,似乎有右边距

这是截图。

enter image description here

您可以将StoryBoard用作容器,而不是将UIView添加到此UIImageView中。在这里,您必须计算右边距,容器视图的宽度和“UIImageViews”宽度。

UIView