2014-11-04 13 views
20

W skrócie, chciałbym utworzyć właściwość @IBInspectable, która pozwala wybrać z listy rzeczy z rozwijanego menu, gdy jesteś w Storyboard. Także jeśli istnieje sposób tworzenia przegród i lepszego organizowania IBInspectables Chciałbym wiedzieć, czy to też możliwe. W moim przykładzie chciałbym utworzyć ciągi regex dla numeru telefonu, więc gdy przejdę do storyboardu, mogę po prostu wybrać pozycję "numer telefonu" z rozwijanego menu zamiast wpisywać ciąg regex.IBInspectable Tworzenie listy rozwijanej i lepszej organizacji

Obecnie posiadam podklasę TextField, dzięki czemu mogę dodać do niej jeszcze więcej IBInspectables jak regex (co widać na zdjęciu). Tak jak stoi to, co mam dla mojego podklasy 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

+1

Dla osób przyjeżdżających tu później, można improwizować/zrobić z kilku właściwości BOOL, że użytkownik może włączać i wyłączać. To nie jest idealne, ale jest to opcja. – hhanesand

+0

@Jordan Hochstetler +1 za twoje pytanie czy masz na to rozwiązanie? – Rakesh

Odpowiedz

1

I would like to create an @IBInspectable property that allows you to select from a list of things in a drop down menu when you are in Storyboards

O ile mi wiadomo, wymienia (macierze) nie są jeszcze obsługiwane.
suported typy tej pory są:
Int
CGFloat
Double
String
Bool
CGPoint
CGSize
CGRect
UIColor
UIImage

Also if there is a way to create dividers and better organize the IBInspectables
Nie sądzę, że takie coś jest możliwe. Ale może ktoś ma obejście.

Polecam do oglądania WWDC Session 411 - What's New in Interface Builder.

6

Nie ma jeszcze wsparcia dla żadnych list ani tablic.

Obecnie następujące rodzaje wsparcia @IBInspectable

  • Int
  • CGFloat
  • Pokój
  • String
  • Bool
  • CGPoint
  • CGSize
  • CGRect
  • UIColor
  • UIImage

Oto kod z wszystkich dostępnych IBInspectable użytkownika:

@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")! 

I wygląda w IB tak:

enter image description here

+0

[Dokumentacja Apple] (http://help.apple.com/xcode/mac/8.0/#/devf60c1c514) na obsługiwanych typach: 'Możesz dodać atrybut IBInspectable do dowolnej właściwości w deklaracji klasy, rozszerzeniu klasy lub kategorii typ: liczba boolowska, liczba całkowita lub liczba zmiennoprzecinkowa, ciąg, zlokalizowane ciąg, prostokąt, punkt, rozmiar, kolor, zakres i zero. " –

5

As daleko jak organizacja, możesz zorganizować to z podziałem rs, nazywając swoje właściwości, aby miały ten sam prefiks.

@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! = "" 

Renders jak

IB