10

我正在尝试在我的 UIButton 中使用 IB Designable 和 IB Inspectable,但似乎有一些错误。

在问题导航器中,捆绑文件:

情节提要: IB Designables:无法更新自动布局状态:无法从路径加载设计(空)

所以我想知道是否有任何配置可以在静态库或类似的东西中使用它?

这是

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface CustomUIButton : UIButton

@property (nonatomic) IBInspectable int cornerRadius;

@end

我想要实时渲染的自定义按钮位于视图控制器内

4

2 回答 2

5

不幸的是,它不能IBDesignables与静态库(或静态框架)一起使用。

这不是一个很好的答案,但我想给出一些原因。

似乎 Interface Builder 加载要显示为可设计的类的方式是通过实际动态加载您创建的动态框架(而不是您的应用程序的二进制文件),并直接使用这些类(在使用 Objective-C 运行时更改它们之后少量)。

您可以看到 Interface Builder 没有加载您的应用程序,而只是通过以下步骤加载了各个框架:

  1. 创建一个新的 Xcode 项目
  2. 在项目中创建一个新的框架目标
  3. 添加一个类是IBDesignable
  4. 在应用程序的情节提要中创建一个视图并将其类设置为框架的IBDesignable
  5. 单击“编辑器”菜单中的“刷新所有视图”
  6. 在项目的 DerivedData 文件夹中,在该IBDesignables目录中,您可以看到仅构建了您的框架目标。

界面生成器实际上是dlopen手动加载您的框架。您还可以看到,为了在构建框架时促进这一点,Interface Builder 实际上RPATH在您的二进制文件中添加了 2 ,因此可以在自定义路径中找到依赖项(您可以使用 来查看otool -L frameworkbinary)。静态库无法使用这种加载二进制文件的方法。

对于它的价值,我认为最好的解决方法是构建动态框架,而不是静态库,但用于IBDesignable构建。你必须做一些配置工作才能做到这一点,而且要绕过 Xcode 来完成这项工作并不容易,但如果你尝试一下,你可以使用构建路径或环境来区分IBDesignable构建与“正常”构建。

于 2017-06-24T05:19:48.893 回答
-2

编辑:IB Designable 和 IB Inspectable 似乎不适用于静态库,因此如果您使用的是静态库,请考虑使用动态框架(仅限 iOS 8)或将组件移到静态库之外(如果可能)。

对于与 Cocoapods 相关的问题,请使用以下解决方案:

这与这个问题有关

这是解决方案:

1) 安装Cocoapods (0.36.0.beta.1)或更新版本;

2) 添加use_frameworks!到您的Podfile

在这里查看更多。

于 2015-01-23T11:37:53.177 回答