【问题标题】:Enter a rightview UIImageView to a UITextField将 rightview UIImageView 输入到 UITextField
【发布时间】:2013-10-08 06:38:49
【问题描述】:

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

【问题讨论】:

    标签: ios uiimageview uikit uitextfield ios7


    【解决方案1】:

    你必须设置Textfield的rightViewMode,因为这个属性的默认值是UITextFieldViewModeNever

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

       UITextFieldViewModeWhileEditing,
       UITextFieldViewModeUnlessEditing,
       UITextFieldViewModeAlways
    

    【讨论】:

      【解决方案2】:

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

      这是结果的刻度图像:

      【讨论】:

        【解决方案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)
        

        【讨论】:

          【解决方案4】:

          Swift 3 中的解决方案:

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

          【讨论】:

            【解决方案5】:

            解决方案@IBDesignableSwift 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
                    }
            
                }
            

            注意:您必须为 @IBInspactable 块写入 getset 点,因为 Swift 已警告将 getter 和 setter 一起应用。我们不需要使用 get 语句,所以返回空字符串。属性名称也有包含按钮但没有混淆,这是一个错误。

            然后单击StoryBoard 上的UITextField 并将特定的图像名称赋予setAButtonImageName 属性。

            那么你会得到如下结果

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

            这是截图。

            您可以将UIView 用作容器,而不是将UIImageView 添加到此UIView 中。在这里,你必须计算右边距,容器视图的width和`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
                    }
                }
            

            【讨论】:

              【解决方案6】:

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

              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;
              

              检查两件事

              1. txtField.rightViewMode = UITextFieldViewModeAlways
              2. 为每个 textField 单独的 imageView

              【讨论】:

                猜你喜欢
                • 2021-03-12
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-10-22
                • 1970-01-01
                • 2020-01-29
                相关资源
                最近更新 更多