And*_*huk 53 cocoa-touch ios uiactivity uiactivityviewcontroller
我创建UIActivityViewController并通过String与URL它.这显然是配置UIActivityViewController使用我想要排除的一些项目(我的目标是分享有关我的应用程序的信息).
我设法通过设置适当的方法排除了许多系统提供的活动(如"添加到阅读列表")excludedActivityTypes.
但是,我无法排除提醒和Notes应用程序.有人可以建议一种方法吗?这些应用程序在列表中显示第3和第4,因此除非用户滚动,否则Twitter和Facebook不可见.
Dan*_*orm 50
如果您不想要子类UIActivityViewController,可以.excludedActivityTypes在创建时将它们包含在您的子类中UIActivityViewController.
目标C:
UIActivityViewController *activityController = [[UIActivityViewController alloc]initWithActivityItems:sharingItems applicationActivities:nil];
activityController.excludedActivityTypes = @[
UIActivityTypeAssignToContact,
UIActivityTypePrint,
UIActivityTypeAddToReadingList,
UIActivityTypeSaveToCameraRoll,
UIActivityTypeOpenInIBooks,
@"com.apple.mobilenotes.SharingExtension",
@"com.apple.reminders.RemindersEditorExtension"
];
[self presentViewController:activityController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
Swift 4.2:
let activityController = UIActivityViewController(activityItems: sharingItems, applicationActivities: nil)
activityController.excludedActivityTypes = [
UIActivity.ActivityType.assignToContact,
UIActivity.ActivityType.print,
UIActivity.ActivityType.addToReadingList,
UIActivity.ActivityType.saveToCameraRoll,
UIActivity.ActivityType.openInIBooks,
UIActivity.ActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension"),
UIActivity.ActivityType(rawValue: "com.apple.mobilenotes.SharingExtension")]
present(activityController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
gui*_*ido 35
Swift 2.2版本.在iOS9.3中测试过.作品.
更新并获得App Store Review的批准.
import UIKit
class ActivityViewController: UIActivityViewController {
func _shouldExcludeActivityType(activity: UIActivity) -> Bool {
let activityTypesToExclude = [
"com.apple.reminders.RemindersEditorExtension",
"com.apple.mobilenotes.SharingExtension",
UIActivityTypeOpenInIBooks,
UIActivityTypePrint,
UIActivityTypeAssignToContact,
"com.google.Drive.ShareExtension"
]
if let actType = activity.activityType() {
if activityTypesToExclude.contains(actType) {
return true
}
else if super.excludedActivityTypes != nil {
return super.excludedActivityTypes!.contains(actType)
}
}
return false
}
}
Run Code Online (Sandbox Code Playgroud)
也很有用
"com.apple.mobileslideshow.StreamShareService"
Run Code Online (Sandbox Code Playgroud)
摆脱"云"之一.
Mat*_*ini 19
有一种方法,但涉及私有API.
Apple有时会例外,特别是如果您修复了错误.
让我们深入了解细节......
UIActivityViewController有一个名为"_availableActivitiesForItems:"的私有方法,它返回一个UISocialActivity对象数组.
UISocialActivity有一个有趣的属性,称为"activityType",它返回一个域格式的活动类型.
经过一些测试,我设法发现了Reminder和Notes活动类型:
不幸的是,将这两种类型传递给".excludedActivityTypes"没有任何区别.
"_availableActivitiesForItems:"来救援!
老路:
更新:我找到了更好的方法.
我发布的第一个解决方案在某些情况下不起作用,因此不应该被认为是稳定的.
标题:
#import <UIKit/UIKit.h>
@interface UISocialActivity : NSObject
- (id)activityType;
@end
@interface UIActivityViewController (Private)
- (id)_availableActivitiesForItems:(id)arg1;
@end
@interface ActivityViewController : UIActivityViewController
@end
Run Code Online (Sandbox Code Playgroud)
执行:
@implementation ActivityViewController
- (id)_availableActivitiesForItems:(id)arg1
{
id activities = [super _availableActivitiesForItems:arg1];
NSMutableArray *filteredActivities = [NSMutableArray array];
[activities enumerateObjectsUsingBlock:^(UISocialActivity* _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (![[obj activityType] isEqualToString:@"com.apple.reminders.RemindersEditorExtension"] &&
![[obj activityType] isEqualToString:@"com.apple.mobilenotes.SharingExtension"]) {
[filteredActivities addObject:obj];
}
}];
return [NSArray arrayWithArray:filteredActivities];
}
@end
Run Code Online (Sandbox Code Playgroud)
新方式:
标题:
@interface UIActivityViewController (Private)
- (BOOL)_shouldExcludeActivityType:(UIActivity*)activity;
@end
@interface ActivityViewController : UIActivityViewController
@end
Run Code Online (Sandbox Code Playgroud)
执行:
@implementation ActivityViewController
- (BOOL)_shouldExcludeActivityType:(UIActivity *)activity
{
if ([[activity activityType] isEqualToString:@"com.apple.reminders.RemindersEditorExtension"] ||
[[activity activityType] isEqualToString:@"com.apple.mobilenotes.SharingExtension"]) {
return YES;
}
return [super _shouldExcludeActivityType:activity];
}
Run Code Online (Sandbox Code Playgroud)
@结束
"非法",但它的确有效.
很高兴知道它是否真的通过了Apple验证.
任何人都在 2019 年在这篇文章中跌跌撞撞。提醒扩展的关键在 iOS 13 中发生了变化,现在是:
(rawValue: "com.apple.reminders.sharingextension")
Run Code Online (Sandbox Code Playgroud)
小智 6
您不能排除这些,因为未UIActivities在Apple文档中声明Notes和Reminders .只有iOS9的问题,并希望Apple将提供此选项.直到这一刻宣布的UIActivities是:
UIActivityTypePostToFacebook,
UIActivityTypePostToTwitter,
UIActivityTypePostToWeibo,
UIActivityTypeMessage,
UIActivityTypeMail,
UIActivityTypePrint,
UIActivityTypeCopyToPasteboard,
UIActivityTypeAssignToContact,
UIActivityTypeSaveToCameraRoll,
UIActivityTypeAddToReadingList,
UIActivityTypePostToFlickr,
UIActivityTypePostToVimeo,
UIActivityTypePostToTencentWeibo,
UIActivityTypeAirDrop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20582 次 |
| 最近记录: |