web-dev-qa-db-fra.com

IBInspectable Créer une liste déroulante et une meilleure organisation

En bref, je voudrais créer un @IBInspectable propriété qui vous permet de sélectionner une liste de choses dans un menu déroulant lorsque vous êtes dans les storyboards. De plus, s'il existe un moyen de créer des séparateurs et de mieux organiser le IBInspectables, je voudrais savoir si cela est également possible. Dans mon exemple, je voudrais créer des chaînes d'expression régulière pour un numéro de téléphone afin que lorsque je vais dans le storyboard, je puisse simplement sélectionner l'élément "numéro de téléphone" dans un menu déroulant au lieu d'entrer une expression régulière chaîne.

Actuellement, j'ai sous-classé un TextField afin que je puisse ajouter encore plus de IBInspectables comme regex (que vous pouvez voir dans l'image). Donc, en l'état, voici ce que j'ai pour mon sous-classe UITextField:

@IBDesignable public class FRM_TextField: UITextField {


@IBInspectable public var regex : String?

public var isValid : Bool{
    if let unwrappedRegex = regex{
        let applied_regex_expression = NSRegularExpression.regularExpressionWithPattern(unwrappedRegex, options: nil, error: nil)

        let numberOfMatches = applied_regex_expression?.numberOfMatchesInString(text, options: nil, range: NSMakeRange(0, countElements(text)))


        if(numberOfMatches > 0 ){
                return true
        }else{
                return false
        }
    }
    return false
}

  public required init(coder aDecoder: NSCoder) {
     super.init(coder: aDecoder)
}

  public override init(){
     super.init();
}

  public override init(frame: CGRect) {
     super.init(frame: frame)
  }   
}

Regex Toolbar

32

Il n'y a pas encore de support de listes ou de tableaux.

Actuellement, les types suivants prennent en charge @IBInspectable

  • Int
  • CGFloat
  • Double
  • Chaîne
  • Bool
  • CGPoint
  • CGSize
  • CGRect
  • UIColor
  • UIImage

Voici un code avec tous les IBInspectable disponibles:

    @IBInspectable var integer: NSInteger = 10
    @IBInspectable var float: CGFloat = 10
    @IBInspectable var double: Double = 10
    @IBInspectable var string: String = "string"
    @IBInspectable var bool: Bool = true
    @IBInspectable var point: CGPoint = CGPointMake(1, 0)
    @IBInspectable var rect: CGRect = CGRectMake(0, 0, 100, 100)
    @IBInspectable var color: UIColor = UIColor.redColor()
    @IBInspectable var size: CGSize = CGSizeMake(100, 100)
    @IBInspectable var image: UIImage = UIImage(named: "Logo")!

Et cela ressemble à IB comme ceci:

enter image description here

12
skywinder

En ce qui concerne l'organisation, vous pouvez l'organiser avec des séparateurs en nommant vos propriétés afin qu'elles aient le même préfixe.

@IBInspectable var ValText : Bool! = false
@IBInspectable var ValEmail : Bool! = false
@IBInspectable var ValCreditCard : Bool! = false
@IBInspectable var Positives : Bool! = false
@IBInspectable var Money : Bool! = false
@IBInspectable var Phone : Bool! = false
@IBInspectable var ZipCode : Bool! = false
@IBInspectable var Street : Bool! = false
@IBInspectable var IPAddress : Bool! = false
@IBInspectable var MAC : Bool! = false
@IBInspectable var AlphaNum : Bool! = false
@IBInspectable var AlphaNumSpaces : Bool! = false
@IBInspectable var AlphaNumNoSpaces : Bool! = false
@IBInspectable var URL : Bool! = false
@IBInspectable var ValidationType : String! = ""

Rend comme

IB

12
Andrew Gene

Je voudrais créer un @IBInspectable propriété qui vous permet de sélectionner une liste de choses dans un menu déroulant lorsque vous êtes dans les storyboards.

Pour autant que je sache, les listes (tableaux) ne sont pas encore prises en charge. Les types pris en charge jusqu'à présent sont:

  • Int
  • CGFloat
  • Double
  • String
  • Bool
  • CGPoint
  • CGSize
  • CGRect
  • UIColor
  • UIImage

Aussi s'il existe un moyen de créer des séparateurs et de mieux organiser les IBInspectables.

Je ne pense pas qu'une telle chose soit possible. Mais peut-être que quelqu'un a une solution de contournement.

Je vous recommande de regarder WWDC Session 411 - Quoi de neuf dans Interface Builder .

7
Rafael Machado