UIActivity自定义共享,触摸更多按钮时不显示缩略图图标

ZYi*_*iOS 9 iphone share ios uiactivity uiactivitycategory

我的应用程序支持iOS 7+,我使用UIActivity图像大小:iPhone为60pt,iOS为iPad为76pt,

当触摸更多按钮重新排序项目时,它无法显示列表中的图标.

显示分享活动

在此输入图像描述

代码如下:

class ZYShare {
class ActivityItem {
    init() {
        self.title = ""
        self.icon = ""
    }

    var title: String?
    var icon: String?
    var type: ShareType = ShareTypeAny
}

class CommonActivity: UIActivity {
    lazy var itemInfo = ActivityItem()

    override func prepareWithActivityItems(activityItems: [AnyObject]) {
        // do something

    }

    override func canPerformWithActivityItems(activityItems: [AnyObject]) -> Bool {
        return true
    }

    override class func activityCategory() -> UIActivityCategory {
        return UIActivityCategory.Action
    }

    override func activityType() -> String? {

        return NSLocalizedString(itemInfo.title ?? "", comment: "")
    }

    override func activityTitle() -> String? {
        return NSLocalizedString(itemInfo.title ?? "", comment: "")
    }

    override func activityImage() -> UIImage? {
        println(itemInfo.icon)

        if let icon = itemInfo.icon {
            return UIImage(named: icon)
        } else {
            return nil
        }
    }

    override func performActivity() {
        ShareSDK.showShareViewWithType(itemInfo.type
            , container: nil
            , content: publishContent
            , statusBarTips: false
            , authOptions: authOptions
            , shareOptions: options
            , result: handle)

        self.activityDidFinish(true)
    }
}

class QQActivity: CommonActivity {
    override init() {
        super.init()

        self.itemInfo.icon = "ShareToQQ"
        self.itemInfo.title = "QQ"
        self.itemInfo.type = ShareTypeQQ
    }
}

class WeChatSessionActivity: CommonActivity {
    override init() {
        super.init()

        self.itemInfo.icon = "ShareToWeChat"
        self.itemInfo.title = "??"
        self.itemInfo.type = ShareTypeWeixiSession
    }
}

class WeChatTimelineActivity: CommonActivity {
    override init() {
        super.init()

        self.itemInfo.icon = "ShareToWeChatTimeLine"
        self.itemInfo.title = "???"
        self.itemInfo.type = ShareTypeWeixiTimeline
    }
}

class QQSpaceActivity: CommonActivity {
    override init() {
        super.init()

        self.itemInfo.icon = "ShareToQzone"
        self.itemInfo.title = "QQ??"
        self.itemInfo.type = ShareTypeQQSpace
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Lab*_*Ars 5

相当古老的问题,但也许解决方案也对其他人有帮助!

在您的UIActivity子类中实现/覆盖方法

- (UIImage *)activityImage {
    return [UIImage imageNamed:@"Activity Icon"];
}
Run Code Online (Sandbox Code Playgroud)

返回要在UIActivityViewController本身中显示的图像(已完成)。

除了此实现/覆盖方法之外

- (UIImage *)activitySettingsImage {
    return [UIImage imageNamed:@"Activity Settings Icon"];
}
Run Code Online (Sandbox Code Playgroud)

返回(其他或相同)图像以显示在更多/设置视图中。

我没有在文档中找到第二种方法,但是它不是UIAction的“ _xx”方法,所以我想它不是私有的...

  • 您好@ZYiOS我尝试了与上述描述相同的实现,但是在我的应用程序中不起作用。 (2认同)