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;}