UIActivityViewController 如何根据不断变化的数组动态排除项目?
How to UIActivityViewController excluded items dynamic based on a changing array?
我完成了实施教程 UIActivityViewController
一切都按预期工作。我还可以使用 excludedItems
属性 删除 UIActivityViewController
中的任何默认选项。但是现在我想让这段代码更加动态。实际上我的计划是用户可以选择他可以选择从 UIActivityViewController
中省略或排除的选项。因此,为此我计划传递一个带有一些固定键的数组,并基于这些键我可以定义要包含在排除列表中的项目。下面是示例代码:
NSArray* excludedArray = [NSArray arrayWithObjects: @"Facebook", nil];
UIActivityViewController *controller = [[UIActivityViewController alloc]initWithActivityItems:items applicationActivities:nil];
if ( [excludedArray containsObject: @"Facebook"] ) {
NSArray *excluded = @[UIActivityTypeMessage];
controller.excludedActivityTypes = excluded;
}
目前 excludedArray
仅包含 message
字符串,因此我将 UIActivityTypeMessage
添加到 excluded
数组中。但是明天如果用户向 excludedArray
添加更多项目,例如 print
,那么基于此我必须能够将 UIActivityTypePrint
添加到 excluded
数组。如何实现?
Link UIActivityType 枚举值以及您将使用 switch case 提供给用户的选择。
在 select/deselect 更新数组。
最后将枚举数组传递给 excludedActivityTypes.
func getExcludedActivityTypes(stringArray: [String]) -> [UIActivity.ActivityType]{
var excludeArray: [UIActivity.ActivityType] = []
for str in stringArray
{
switch str
{
case "messaging":
excludeArray.append(.message)
break
case "postToTwitter":
excludeArray.append(.postToTwitter)
break
// write others to exclude those types
default:
break
}
}
return excludeArray}
Objective c - 替代方案(您可以使用 if else 语句,因为 objective c 不支持 switch cases 的字符串)
-(NSArray<UIActivityType>*)getExcludedActivityTypes:(NSArray<NSString*>*)stringArray {
NSMutableArray<UIActivityType> * excludeArray = @[].mutableCopy;
for(NSString * str in stringArray) {
if([str isEqualToString:@"messaging"]){
[excludeArray addObject:UIActivityTypeMessage];
}
else if([str isEqualToString:@"postToTwitter"]){
[excludeArray addObject:UIActivityTypePostToTwitter];
}
// write others to exclude those types
}
return excludeArray;}
我完成了实施教程 UIActivityViewController
一切都按预期工作。我还可以使用 excludedItems
属性 删除 UIActivityViewController
中的任何默认选项。但是现在我想让这段代码更加动态。实际上我的计划是用户可以选择他可以选择从 UIActivityViewController
中省略或排除的选项。因此,为此我计划传递一个带有一些固定键的数组,并基于这些键我可以定义要包含在排除列表中的项目。下面是示例代码:
NSArray* excludedArray = [NSArray arrayWithObjects: @"Facebook", nil];
UIActivityViewController *controller = [[UIActivityViewController alloc]initWithActivityItems:items applicationActivities:nil];
if ( [excludedArray containsObject: @"Facebook"] ) {
NSArray *excluded = @[UIActivityTypeMessage];
controller.excludedActivityTypes = excluded;
}
目前 excludedArray
仅包含 message
字符串,因此我将 UIActivityTypeMessage
添加到 excluded
数组中。但是明天如果用户向 excludedArray
添加更多项目,例如 print
,那么基于此我必须能够将 UIActivityTypePrint
添加到 excluded
数组。如何实现?
Link UIActivityType 枚举值以及您将使用 switch case 提供给用户的选择。
在 select/deselect 更新数组。
最后将枚举数组传递给 excludedActivityTypes.
func getExcludedActivityTypes(stringArray: [String]) -> [UIActivity.ActivityType]{ var excludeArray: [UIActivity.ActivityType] = [] for str in stringArray { switch str { case "messaging": excludeArray.append(.message) break case "postToTwitter": excludeArray.append(.postToTwitter) break // write others to exclude those types default: break } } return excludeArray}
Objective c - 替代方案(您可以使用 if else 语句,因为 objective c 不支持 switch cases 的字符串)
-(NSArray<UIActivityType>*)getExcludedActivityTypes:(NSArray<NSString*>*)stringArray {
NSMutableArray<UIActivityType> * excludeArray = @[].mutableCopy;
for(NSString * str in stringArray) {
if([str isEqualToString:@"messaging"]){
[excludeArray addObject:UIActivityTypeMessage];
}
else if([str isEqualToString:@"postToTwitter"]){
[excludeArray addObject:UIActivityTypePostToTwitter];
}
// write others to exclude those types
}
return excludeArray;}