对不起,我不能包含代码,因为我在工作中遇到了这种情况,而且出于某些安全原因,我不能共享代码。
我所拥有的:
我有一个包含UI组件和主要基类的Objective-c pod
我想:
我想在主项目中使用Swift组件(RatePlanCardView)。我需要创建一个带有自定义类(RatePlanCardView)的视图控制器包含视图,并为它创建一个插座,我可以调用这个自定义类中的任何函数。
我做了什么:
我在情节提要包含视图中创建了一个视图控制器,然后我将此视图的类更改为(RatePlanCardView),并为其创建了一个插座。
发生了什么:
当我执行调试时,我发现这个插座的类是UIView not (RatePlanCardView),所以每次调用自定义类中的任何函数都会发生如下错误。
正在终止应用程序,因为未捕获异常'NSInvalidArgumentException',原因:'-UIView adjustCardView:无法识别的选择器已发送到实例0x7ffbae08ab10‘
而(adjustCardView)是(RatePlanCardView)类中的函数。
我有两个解决方案:
1-我为新组件(RatePlanCardView)创建了Swift pod,这个类继承了ObjC pod (ExpandableCardView)的一个类,并且编译成功。当我把新的pod放到主项目中并根据需要使用它时,一切都编译成功了,但是当我导航到新的视图控制器并调用函数(adjustCardView)时,上面的错误就会触发。但是当我看到这个函数的定义时,xCode将我移到正确的函数,但它不能执行任何函数,因为它已经将自定义类视为UIView,而不是RatePlanCardView。
2-我试图搜索,如何创建混合开发的pod,但我找不到任何支持这个解决方案的教程。
注意:
感谢您的耐心和支持,给我时间阅读我的问题。当然,任何其他解决方案都将非常受欢迎。另外,如果你帮助我任何上述的解决方案,也谢谢。
提前谢谢。
我解决了这个问题:
我创建了包含objC代码和带有桥接头文件的swift代码的框架,一切工作正常
发布于 2019-01-23 20:32:14
您创建的outlet应该是这样的:
@property (nonatomic, weak) IBOutlet RatePlanCardView *rpCardViewOutlet;现在转到XIB并将此插座连接到您的RatePlanCardView视图。这样,您只能在类型匹配时才能将视图与outlet连接,并且应该触发对此类函数的任何调用。
https://stackoverflow.com/questions/54326034
复制相似问题