![](/img/trans.png)
[英]How can I add padding to UIImageView that is inside of a rightView of a 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件事
txtField.rightViewMode = UITextFieldViewModeAlways
imageView
每個textField
使用@IBDesignable
和Swift 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
塊寫入get和set點,因為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.