簡體   English   中英

輸入右視圖UIImageView到UITextField

[英]Enter a rightview UIImageView to a UITextField

我有一個目標動作,當按下按鈕時,我驗證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出現?

您必須設置rightViewMode的rightViewMode,因為此屬性的默認值為UITextFieldViewModeNever

所以你必須從以下設置模式,

   UITextFieldViewModeWhileEditing,
   UITextFieldViewModeUnlessEditing,
   UITextFieldViewModeAlways

你確定你沒有錯過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
        }
    }
}

對於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)

在此輸入圖像描述

如果您有兩個或更多字段,請嘗試此代碼! 它為我工作。

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每個textField

使用@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語句,因此返回空字符串。 此外,屬性名稱包含Button但不會混淆,這是一個錯誤。

然后單擊StoryBoard上的UITextField並將特定圖像名稱提供給setAButtonImageName屬性。

在此輸入圖像描述

然后你會得到以下結果

在此輸入圖像描述

另一種情況是創建rightView與似乎有正確的邊距

這是截圖。

在此輸入圖像描述

您可以使用UIView作為容器,而不是將UIImageView添加到此UIView 在這里,您必須計算右邊距 ,容器視圖的寬度和'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
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM