Введите правый UIImageView в 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
появился?
Ответы
Ответ 1
Вы уверены, что не пропустили фрейм 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
Вы должны установить rightViewMode
для текстового поля, потому что значение по умолчанию для этого свойства UITextFieldViewModeNever.
поэтому вам нужно установить режим из следующего,
UITextFieldViewModeWhileEditing,
UITextFieldViewModeUnlessEditing,
UITextFieldViewModeAlways
Ответ 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
}
}
}
Ответ 4
Для 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]()
Ответ 5
Если у вас есть два или более поля, попробуйте этот код! это работает для меня.
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
Ответ 6
Решение с @IBDesignable
и Swift 3
Во-первых, вы можете создать @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
}
}
Примечание: Вы должны написать и получить и установить точки для блока @IBInspactable
потому что Swift предупредил о применении геттера и сеттера вместе. Нам не нужно использовать оператор get, поэтому вернулась пустая строка. Также имя атрибута включает в себя кнопку, но не путать, это ошибка.
Затем щелкните UITextField
на StoryBoard
и присвойте специальное имя изображения атрибуту setAButtonImageName.
![enter image description here]()
Тогда вы получите следующий результат
![enter image description here]()
Другая ситуация - это создание RightView с правым полем.
Вот скриншот.
![enter image description here]()
Вы можете использовать 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
}
}