将 rightview UIImageView 输入到 UITextField
Posted
技术标签:
【中文标题】将 rightview UIImageView 输入到 UITextField【英文标题】:Enter a rightview UIImageView to a 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
出现?
【问题讨论】:
【参考方案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】:解决方案与@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 语句,所以返回空字符串。属性名称也有包含按钮但没有混淆,这是一个错误。
然后单击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;
检查两件事
txtField.rightViewMode = UITextFieldViewModeAlways
为每个 textField
单独的 imageView
【讨论】:
以上是关于将 rightview UIImageView 输入到 UITextField的主要内容,如果未能解决你的问题,请参考以下文章
禁用 UITextField 时如何在 leftView/rightView 中启用点击?
重新加载行包含带有 rightView 的 UITextField 会导致无限循环和内存溢出
IOS 13:UITextField rightView的间距问题
如何在 Xamarin IOS 自定义渲染器中单击 UITextField Rightview 打开 UIPickerView