2016-09-17 2 views
1

Also sieht mein Code wie folgt aus, richtet sich an jedes bekannte Textfeld und wendet denselben Modifikator auf sie an.Ist es möglich, alle Textfelder in einer Ansicht auszuwählen?

Gibt es einen Weg, ich kann nur alle Textfelder in der Ansicht auswählen?

import UIKit 

class CreateAccount: UIViewController, UITextFieldDelegate, UIScrollViewDelegate { 

    @IBOutlet weak var scrollViewer: UIScrollView! 
    @IBOutlet weak var usernameTextField: UITextField! 
    @IBOutlet weak var emailTextField: UITextField! 
    @IBOutlet weak var passwordTextField: UITextField! 
    @IBOutlet weak var reenterPasswordTextField: UITextField! 

    let textFieldBorderColor: UIColor = UIColor(red: 170.0/255.0, green: 170.0/255.0, blue: 170.0/255.0, alpha: 1.0) 
    let textFieldBorderFocusedColor: UIColor = UIColor(red: 31.0/255.0, green: 111.0/255.0, blue: 217.0/255.0, alpha: 1.0) 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view. 


     usernameTextField.layer.borderColor = textFieldBorderColor.CGColor 
     emailTextField.layer.borderColor = textFieldBorderColor.CGColor 
     passwordTextField.layer.borderColor = textFieldBorderColor.CGColor 
     reenterPasswordTextField.layer.borderColor = textFieldBorderColor.CGColor 

     usernameTextField.layer.borderWidth = 1.0 
     emailTextField.layer.borderWidth = 1.0 
     passwordTextField.layer.borderWidth = 1.0 
     reenterPasswordTextField.layer.borderWidth = 1.0 

     scrollViewer.delegate = self 


    } 
} 

Antwort

1

Sie können ein UITextField zu Unterklasse müssen und dann von dieser Unterklasse alle Elemente Ihrer UITextField erben.

Dann müssen Sie nur Eigenschaften/Stile für diese Unterklasse anwenden.

Zum Beispiel (geschrieben in Swift 3.0):

class MyCustomTextField: UITextField { 
    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     self.layer.borderWidth = 3.0 
     self.layer.borderColor = UIColor.red.cgColor 
    } 
} 

@IBOutlet weak var usernameTextField: MyCustomTextField! 
... 

func viewDidLoad() { 
    // you don't need to apply style properties here anymore 
} 
0

Ich bin nicht einer Art und Weise bewusst sofort alle Text-Felder auswählen, aber wenn Sie nach einem Weg suchen Platz Sie sparen kann versuchen, alle Ihre Textfelder zu einem Array hinzufügen und dann durchschleifen, um die Änderungen vorzunehmen.

import UIKit 

class CreateAccount: UIViewController, UITextFieldDelegate, UIScrollViewDelegate { 



@IBOutlet weak var scrollViewer: UIScrollView! 
@IBOutlet weak var usernameTextField: UITextField! 
@IBOutlet weak var emailTextField: UITextField! 
@IBOutlet weak var passwordTextField: UITextField! 
@IBOutlet weak var reenterPasswordTextField: UITextField! 



let textFieldBorderColor: UIColor = UIColor(red: 170.0/255.0, green: 170.0/255.0, blue: 170.0/255.0, alpha: 1.0) 
let textFieldBorderFocusedColor: UIColor = UIColor(red: 31.0/255.0, green: 111.0/255.0, blue: 217.0/255.0, alpha: 1.0) 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 

    var textFieldArray = [usernameTextField, emailTextField, passwordTextField, reenterPasswordTextField] 

    for textField in textFieldArray { 

     textField.layer.borderColor = textFieldBorderColor.CGColor 
     textField.layer.borderWidth = 1.0 
    } 



    scrollViewer.delegate = self 


} 

}

0

Dies würde wählen Sie alle UITextField Subviews einer Ansicht:

let textfields = view.subviews.filter({$0.isKindOfClass(UITextField)}) 
0

Sie @IBOutlet Sammlung verwenden können Eigenschaften, um mehrere ähnliche Eigenschaften anzuwenden.

Sie können Benutzeroberflächenelemente zweimal verbinden.

Sobald ihre einzigartigen @IBOutlet Verbindung und einmal die @IBOutlet Sammlung

enter image description here

Dies drückt als [UITextField!] in Swift und als IBOutletCollection(UITextField) in Objective-C

So ...

Swift

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var text1: UITextField! 
    @IBOutlet weak var text2: UITextField! 
    @IBOutlet weak var text3: UITextField! 


    @IBOutlet var allTextFields: [UITextField]! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     for field in allTextFields { 
      field.backgroundColor = UIColor.blueColor() 
     } 

    } 
} 

Objective-C

@interface ViewController() 

@property (weak, nonatomic) IBOutlet UITextField *text1; 
@property (weak, nonatomic) IBOutlet UITextField *text2; 
@property (weak, nonatomic) IBOutlet UITextField *text3; 

@property (strong, nonatomic) IBOutletCollection(UITextField) NSArray *allTextFields; 


@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    for (UITextField *field in self.allTextFields) { 
     field.backgroundColor = [UIColor greenColor]; 
    } 
} 


@end 

beseitigt die Notwendigkeit für Unterklassen und Pflege manuelle Arrays

Sie können auch als generische erhalten, wie Sie benötigen und definieren die Sammlung als ein Bündel von UIView wenn du brauchst.

@property (strong, nonatomic) IBOutletCollection(UIView) NSArray *allViews;

Verwandte Themen