2013-10-08 3 views
11

ich eine Zielaktion haben, dass, wenn eine Taste gedrückt wird, zu validieren ich die UITextFields:Geben Sie einen rightview UIImageView zu einem 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]; 
} 

Meine UITextFields sind wie so in viewDidLoad der Ansicht hinzugefügt:

[self.view addSubview:_name]; 

Wie kann ich eine rightview UIImageView erscheinen lassen?

Antwort

23

Sind Sie sicher, dass Sie den UITextField Rahmen nicht verpassen? Und setzen Sie die rightViewMode?

Dies ist ein Beispiel, das ich gerade geschrieben habe scheint gut zu funktionieren.

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]; 

Hier ist die Zecke Bild als Ergebnis: Right image view

24

Sie haben rightViewMode des Textfeldes zu setzen, da der Standardwert für diese Eigenschaft ist UITextFieldViewModeNever.

so haben Sie Modus, um aus folgenden,

UITextFieldViewModeWhileEditing, 
    UITextFieldViewModeUnlessEditing, 
    UITextFieldViewModeAlways 
3

Lösung in Swift 3:

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

In Swift 3.To Bild anzeigen, bevor Platzhalter-Text in 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 
    } 

Funktion

self.setPaddingView(strImgname: "mail", txtField: txtEmail) 

enter image description here

0

Wenn Sie zwei oder mehr Feld haben nennen dann diesen Code versuchen! es funktioniert für mich.

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; 

Sie überprüfen 2 Dinge

  1. TxtField.rightViewMode = UITextFieldViewModeAlways
  2. Separate Imageview für jedes Textfeld
0

Lösung mit @IBDesignable und Swift 3

Zum einen können Sie @IBDesignable für UITextField wie diese erstellen.

@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 
     } 

    } 

Hinweis: Sie müssen sein schreiben bekommen und gesetzt Punkte für @IBInspactable Block weil Swift hat warnen Getter und Setter zusammen anzuwenden. Wir müssen die get-Anweisung nicht verwenden, daher wurde eine leere Zeichenfolge zurückgegeben. Auch der Attributname enthält Button, aber nicht verwirren, es ist ein Fehler.

Dann klicken Sie auf den UITextField auf Storyboard und den spesific Bild Namen das setAButtonImageName Attribut geben.

enter image description here

Dann werden Sie das folgende Ergebnis

enter image description here

Die andere Situation ist die rightView schaffen bekommen wie rechten Rand

Hier ist der Screenshot scheint hat.

enter image description here

können Sie einen UIView als Behälter als die UIImageView in die dieser UIView hinzufügen verwenden. Hier müssen Sie den rechten Rand, die Breite und die UIImageViews 'Breite der Containeransicht berechnen.

@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 
     } 
    } 
Verwandte Themen