Ios IB_可设计,IBInspectable--接口生成器不更新

Ios IB_可设计,IBInspectable--接口生成器不更新,ios,interface-builder,ibdesignable,ibinspectable,Ios,Interface Builder,Ibdesignable,Ibinspectable,我有以下一组代码: CustomView.h (为便于Swift参考,Swift代码也存在此问题) 斯威夫特 我将UIView添加到情节提要上的视图控制器中,并将其子类设置为CustomView 这将添加“可指定”行。它被卡在“更新”上,工具提示上写着“等待目标生成”。这种状态永远不会改变 当我移动到属性检查时,我可以设置以下属性: 一旦设置,它们也会显示在“用户定义的运行时属性”中: 然而,“可指定的”状态永远不会超过“更新”状态,仍然有相同的工具提示(我已经尝试Cmd+B构建了好几

我有以下一组代码:

CustomView.h
(为便于Swift参考,Swift代码也存在此问题)

斯威夫特
我将
UIView
添加到情节提要上的视图控制器中,并将其子类设置为
CustomView

这将添加“可指定”行。它被卡在“更新”上,工具提示上写着“等待目标生成”。这种状态永远不会改变

当我移动到属性检查时,我可以设置以下属性:

一旦设置,它们也会显示在“用户定义的运行时属性”中:

然而,“可指定的”状态永远不会超过“更新”状态,仍然有相同的工具提示(我已经尝试Cmd+B构建了好几次,没有任何变化)

此外,当我设置
IBInspectable
属性时,每个属性都会得到一个警告:

IBDesignables-忽略“UIView”实例上键路径“borderColor”的用户定义运行时属性。。。此类不符合键边界颜色的键值编码

生成的警告的屏幕截图:


我熟悉关键值编码兼容问题,通常知道如何解决它们。。。但我不明白如何解决这个问题。根据视图的标识检查器,该视图是“CustomView”(不是常规的“UIView”,它没有这些属性)。如果视图不是“CustomView”,那么这些可设计属性就不会显示在属性检查器中,对吗?但是,当Interface Builder尝试将这些属性应用于视图时,它会返回到认为视图的类是“UIView”,并且无法应用这些属性

有什么帮助吗?请让我知道我是否遗漏了一些重要的细节,但这是值得的,(除了ObjC和Swift)。同样值得注意的是,我完全是在另一台机器上遵循本教程的,它工作起来很有魅力(我打算昨晚发表这篇文章,但我当时使用的计算机没有这个问题)


根据评论,有人建议可能未包含
.m
文件,这可能是导致问题的原因。我本以为我会不遗余力地让这种情况发生,但我还是检查了一下

当我第一次尝试这样做时,我的理解是,
IB_DESIGNABLE
类必须是不同的
UIKit
框架的一部分。从第一个屏幕截图可以看出,我建立了一个“CustomView”框架,它有一个类,
CustomView
。您还可以在这里看到,我还创建了一个
OtherView
,它与
CustomView
相同,只是它不在单独的框架中。然而,在两个类之间的故事板上仍然存在相同的问题

这里我们有一个屏幕截图,表明
CustomView.m
包含在
CustomView
框架中:

同时,以下屏幕截图显示了几件事:

  • customview.framework
    适当地包含在主项目中
  • OtherView.m
    也包含在编译源代码中,因此即使
    CustomView
    有问题,
    OtherView
    也应该可以工作,但是它会产生相同的错误
  • Main.storyboard
    LaunchScreen.xib
    显示为红色。我不知道为什么,也不知道为什么
    LaunchScreen.xib
    应该(我没有碰过这个文件),尽管我可以说,在看了其他项目之后,
    Main.storyboard
    对于这些项目也显示为红色,我没有对
    IB_DESIGNABLE
    IBInspectable
    做任何事情


我已经试过多次了。它每次在家里的电脑上都能工作——我无法在家里重现这个问题中描述的问题。在工作中,它从不起作用。这个问题描述的问题每次都会发生

这两台电脑都是MacMini今年新买的(不是新型号,2012年底的型号)。两台计算机都运行OS X Yosemite 10.10。两台计算机都运行Xcode 6.1版。在国内,构建是(6A1052d)。今天早上,我可以确认两台计算机运行的是相同版本的Xcode

其他人向我暗示这可能是坏公羊。那对我来说似乎太牵强了。我已经多次重新启动项目,多次重新启动计算机。在我看来,如果一台大约6个月大的计算机上有坏内存,我会看到其他问题,而且这个问题的一致性会降低。但是,尽管多次从头开始重新启动整个项目并在计算机上完全重新启动,但这个问题仍然存在



值得注意的是,如果我真的编译并运行这个项目,那么带有
IBInspectable
属性的自定义视图实际上会像我期望的脚本那样显示出来。我想,即使没有
IB_DESIGNABLE
IBInspectable
指令,情况也是如此,因为这些指令都是作为用户定义的运行时属性创建的。

基于chrisco的建议,调试所选视图(我已经完成了,但为了更好的衡量,再次尝试了),我注意到编辑器菜单底部还有几个其他选项

  • 自动刷新视图
  • 刷新所有视图
我点击了“刷新所有视图”,在Xcode思考了一下之后,突然情节提要按预期显示了我的视图(正确地应用了我的
IBenspectable
属性)

然后我再次检查了整个过程,以确认这就是解决方案

我创建了一个新类,
Third
#import <UIKit/UIKit.h>

IB_DESIGNABLE
@interface CustomView : UIView

@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;

@end
#import "CustomView.h"

@implementation CustomView

- (void)setBorderColor:(UIColor *)borderColor {
    _borderColor = borderColor;
    self.layer.borderColor = borderColor.CGColor;
}

- (void)setBorderWidth:(CGFloat)borderWidth {
    _borderWidth = borderWidth;
    self.layer.borderWidth = borderWidth;
}

- (void)setCornerRadius:(CGFloat)cornerRadius {
    _cornerRadius = cornerRadius;
    self.layer.cornerRadius = cornerRadius;
}

@end
@IBDesignable
class CustomView : UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)
    }

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

    @IBInspectable var borderColor : UIColor = UIColor.clearColor() {
        didSet {
            self.layer.borderColor = borderColor.CGColor
        }
    }

    @IBInspectable var borderWidth : CGFloat = 0.0 {
        didSet {
            self.layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var cornerRadius : CGFloat = 0.0 {
        didSet {
            self.layer.cornerRadius = cornerRadius
        }
    }
}
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MUG-jc-2Ml" customClass="ForwardArrow" customModule="CustomViews">
rm -rf ~/Library/Developer/Xcode/DerivedData/*
-(void)viewDidLoad {
    self.clipsToBounds = YES;
}
@IBInspectable var borderColor: UIColor? {
    didSet {
        layer.borderColor = borderColor!.CGColor
    }
}

@IBInspectable var borderWidth: String? {
    didSet {
        layer.borderWidth = CGFloat(Int(borderWidth!) ?? 0)
    }
}

@IBInspectable var cornerRadius: String? {
    didSet {
        layer.cornerRadius = CGFloat(Int(cornerRadius!) ?? 0)
        layer.masksToBounds = layer.cornerRadius > 0
    }
}
// Doesn't show up in IB
@IBInspectable var includeLeftSection = true

// Shows now that it knows the type
@IBInspectable var includeLeftSection : Bool = true