【问题标题】:Using MSStickerBrowserViewController with objective c将 MSStickerBrowserViewController 与目标 c 一起使用
【发布时间】:2018-02-15 00:40:46
【问题描述】:

我发现大多数关于 iMessage 扩展开发的 iMessage 应用教程都是用 Swift 编写的,因为我是 Objective-c 的初学者,并且必须快速实现 iMessage 扩展我想用 Objective-C 编码我发现MSStickerBrowserViewController 是一些方法像UITableViewController 因为它使用数据源协议对吗?

所以我像这样实现我的 iMessage 扩展应用程序:

 @interface MessagesViewController ()<MSStickerBrowserViewDataSource>
 @property (strong, nonatomic) NSMutableArray *stickerList;
 @end

我已经实现了

 stickerBrowserView:(MSStickerBrowserView *)stickerBrowserView stickerAtIndex:(NSInteger)index

(NSInteger) numberOfStickersInStickerBrowserView:(MSStickerBrowserView *)stickerBrowserView

方法并初始化 stickerList 作为 viewController 的属性

我认为添加MSStickerViewController并将其作为根视图的子视图会很好,然后我的工作就完成了

MSStickerBrowserViewController *stickerBrowserViewController = [[MSStickerBrowserViewController alloc]initWithStickerSize:MSStickerSizeRegular];
stickerBrowserViewController.view.backgroundColor = [UIColor redColor];
[self.view addSubview:stickerBrowserViewController.view];

但在这样做之后,我唯一得到的是红色内容(表明 MSStickerBrowserViewController 的视图确实已添加到根视图中)

但我的图片都没有显示为贴纸

我认为MSStickerBrowserViewController 的数据资源可能缺少一些挂钩,但我找不到委托或资源属性来挂钩它们。

我还注意到有一些 override 的东西可以用 swift 代码来做这件事,但是我是否必须创建一个 MSStrickerBrowserViewController 的子类并在子类中实现 MSStickerBrowserViewDataSource 的协议才能做到这一点?

那么如何使这项工作,我的意思是使用 Objective-C 代码?

【问题讨论】:

    标签: ios objective-c imessage


    【解决方案1】:

    问题与在MessagesViewController 中实现MSStickerBrowserViewDataSource 协议有关,但随后创建了MSStickerBrowserViewController 的单独实例。到目前为止这很好,但是正如您所指出的,您没有将MSStickerBrowserViewController 上的数据源设置为实现MSStickerBrowserViewDataSource 协议的类:MessagesViewController

    MSStickerBrowserViewController 类有一个MSStickerBrowserView 类型的视图,它被称为stickerBrowserView。您要查找的属性是 dataSource 并描述为 here。在您的代码上下文中,这将是:stickerBrowserViewController.stickerBrowserView.dataSource

    我不能确定为什么框架工程师没有决定调用stickerBrowserView 只是view,以及为什么stickerBrowserView 数据源不调用delegate 但也许他们想画一个非常清楚stickerBrowserView 与常规 UIView 的功能之间的区别。

    正如您在问题中提到的那样,另一种方法是子类MSStickerBrowserViewController,然后在该子类中实现数据源方法。使用第一种方法时,您可能会遇到两个继承自UIViewController 的类同时出现在屏幕上的问题。可以做到,但在这种情况下可能没有必要。对于您的特定情况,我建议您采用第二条路线并将MSStickerBrowserViewController 子类化,而不是使用您的MessagesViewController

    @interface MessagesViewController ()<MSStickerBrowserViewDataSource>
    @property (strong, nonatomic) NSMutableArray *stickerList;
    @end
    
    MSStickerBrowserViewController *stickerBrowserViewController = [[MSStickerBrowserViewController alloc]initWithStickerSize:MSStickerSizeRegular];
    stickerBrowserViewController.view.backgroundColor = [UIColor redColor];
    
    // Missing Line
    stickerBrowserViewController.stickerBrowserView.dataSource = self;
    
    [self.view addSubview:stickerBrowserViewController.view];
    

    【讨论】:

      猜你喜欢
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 2013-09-23
      • 1970-01-01
      相关资源
      最近更新 更多