gpt4 book ai didi

ios - 子类化并使用 UIActivityItemProvider 和 UIActivityViewController

转载 作者:可可西里 更新时间:2023-11-01 03:27:27 28 4
gpt4 key购买 nike

我终于找到了和我面临同样问题的人。

UIActivityViewController customize text based on selected activity

我想自定义与 UIActivityViewController 的事件共享的内容。好的答案如下:

"Instead of passing the text strings into the initWithActivityItems call, pass in your own sub-class of the UIActivityItemProvider class and when you implement the itemForActivityType method it will provide the sharing service as the 'activityType' parameter.

You can then return the customized content from this method."

我知道技巧,但我不知道怎么做...

我把它作为一个子类:

@interface SharingItems : UIActivityItemProvider

@implementation SharingItems

-(id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
{
// Here depending on the activityType i want to share NSString or UIImage
}

@end

但我不知道现在在我原来的 viewController 中该做什么:

-(void)actionSheet
{
if ([[UIActivityViewController class] respondsToSelector:@selector(alloc)])
{
__block NSString *imgName = [[NSString alloc] initWithFormat:@"%@", _sharingUrl];
NSArray *activityItems = [NSArray arrayWithObjects:imgName, nil];

UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityController animated:YES completion:nil];

__block NSString *chan = [[NSString alloc] initWithFormat:@"%@", _channel];
[activityController setCompletionHandler:^(NSString* activityType, BOOL completed)
{
if (completed)
{
}
}];
}
else
[self displayActionSheet];
}

最佳答案

这是一个示例 UIActivityItemProvider(未经测试但根据工作代码改编):

@implementation StringProvider

- (id)initWithPlaceholderString:(NSString*)placeholder facebookString:(NSString*)facebookString
{
self = [super initWithPlaceholderItem:placeholder];
if (self) {
_facebookString = facebookString;
}
return self;
}

- (id)item
{
if ([self.activityType isEqualToString:UIActivityTypePostToFacebook]) {
return _facebookString;
} else {
return self.placeholderItem;
}
}

@end

然后当您设置事件 View Controller 时:

StringProvider *stringProvider = [[StringProvider alloc] initWithPlaceholderString:@"Default string" facebookString:@"Hello, Facebook."];
UIActivityViewController *shareController = [[UIActivityViewController alloc] initWithActivityItems:@[stringProvider] applicationActivities:nil];

基本上,您创建的 UIActivityItemProvider 会在调用 -(id)item 方法时提供正确的数据,并在您创建事件 View Controller 时传入这些事件项提供程序。您需要使用占位符项目进行初始化,以便操作系统知道最终项目将属于哪个类(很可能是 NSString、NSURL、UIImage)。希望对您有所帮助!

关于ios - 子类化并使用 UIActivityItemProvider 和 UIActivityViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494611/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com