IBInspectable创建下拉菜单和更好的组织

36

简而言之,我想创建一个 @IBInspectable 属性,让你在 Storyboards 中从下拉菜单中选择列表中的某些内容。如果有一种方法可以创建分隔符并更好地组织 IBInspectables,我也想知道是否可能。在我的例子中,我想为电话号码创建正则表达式字符串,这样当我进入Storyboard时,我就可以直接在下拉菜单中选择“电话号码”项目,而不是输入正则表达式字符串。

目前,我已经对 TextField 进行了子类化,以便我可以添加更多的 IBInspectables,比如正则表达式(你可以在图片中看到)。因此,目前我的子类化的 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)
  }   
}

正则表达式工具栏


1
对于后来的人,你可以 improvisation/做一些 BOOL 属性,用户可以切换开关。虽然不是理想的选择,但这是一个选项。 - hhanesand
@Jordan Hochstetler,你的问题很好,你解决了吗? - Rakesh Mandloi
@Rakesh,仍然没有针对选项数组的答案,但下面的一些答案有助于组织。 - Jordan Hochstetler
3个回答

16

目前还不支持任何列表或数组。

当前支持以下类型的@IBInspectable

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

以下是包含所有可用IBInspectable的代码:

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

在IB中看起来是这样的:

输入图像描述


苹果文档(http://help.apple.com/xcode/mac/8.0/#/devf60c1c514)关于支持的类型:您可以将IBInspectable属性添加到类声明、类扩展或类型类别中的任何属性上,包括布尔值、整数或浮点数、字符串、本地化字符串、矩形、点、大小、颜色、范围和nil。 - Adam Johns

12

就组织而言,您可以通过为属性命名相同的前缀并使用分隔符来对其进行组织。

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

呈现为

IB


10
我希望创建一个@IBInspectable属性,允许您在Storyboards中选择下拉菜单中的列表中的内容。
据我所知,列表(数组)尚未得到支持。目前支持的类型有:
  • Int
  • CGFloat
  • Double
  • String
  • Bool
  • CGPoint
  • CGSize
  • CGRect
  • UIColor
  • UIImage
此外,如果有一种方法可以创建分隔线并更好地组织IBInspectables,那就太棒了。
我认为这样的事情是不可能的。但也许有人有解决方法。
我建议您观看WWDC Session 411 - What's New in Interface Builder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接