有人知道如何在 Swift 中执行此操作(下面的代码)吗? 这是这个问题的第一个答案How to exclude Notes and Reminders apps from the UIActivityViewController?
标题:
@interface UIActivityViewController (Private)
- (BOOL)_shouldExcludeActivityType:(UIActivity*)activity;
@end
@interface ActivityViewController : UIActivityViewController
@end
实现:
@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];
}
最佳答案
我有同样的要求,但无法弄清楚如何覆盖 _shouldExcludeActivityType
Swift 中的方法也可以。
在尝试 method swizzling 失败之后我得出的结论是,使用 Objective-C 创建派生类,然后使用桥接 header 将派生类公开给我的 swift 代码的其余部分,这是最简单、最好的方法。
如果你真的想在 swift 中实现大部分逻辑,只需覆盖 _shouldExcludeActivityType
Objective-C 派生类中的方法委托(delegate)给某个返回 BOOL 的方法,然后在 swift 中创建另一个派生类来重写该方法。
Object-C 派生类 header
#import <UIKit/UIKit.h>
@interface BaseBrowserActivityViewController : UIActivityViewController
- (BOOL)shouldExcludeActivityType:(UIActivity *)activity;
@end
Object-C 派生类实现
#import "BaseBrowserActivityViewController.h"
@interface BaseBrowserActivityViewController ()
@end
@implementation BaseBrowserActivityViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (BOOL)_shouldExcludeActivityType:(UIActivity *)activity
{
return [self shouldExcludeActivityType:activity];
}
- (BOOL)shouldExcludeActivityType:(UIActivity *)activity
{
assert(false); // shouldExcludeActivityType requires overriding.
return false;
}
@end
Swift 派生类实现
import UIKit
class BrowserActivityViewController: BaseBrowserActivityViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func shouldExcludeActivityType(_ activity: UIActivity!) -> Bool {
// Do some testing of the activity here.
return true
}
}
关于ios - 从 Swift 中的 UIActivityViewController 中排除注释和提醒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34768627/