我完成了一個教程來實作UIActivityViewController一切都按預期作業。我還可以使用excludedItems屬性來洗掉UIActivityViewController. 但現在我想讓這段代碼更加動態。實際上我的計劃是用戶可以選擇他可以選擇從UIActivityViewController. 因此,為此我計劃傳遞一個帶有一些固定鍵的陣列,并基于這些鍵我可以定義要包含在排除串列中的專案。下面是示例代碼:
NSArray* excludedArray = [NSArray arrayWithObjects: @"message", nil];
UIActivityViewController *controller = [[UIActivityViewController alloc]initWithActivityItems:items applicationActivities:nil];
if ( [excludedArray containsObject: @"message"] ) {
NSArray *excluded = @[UIActivityTypeMessage];
controller.excludedActivityTypes = excluded;
} else {
// do not found
}
現在excludedArray只包含message字串,因此基于我添加了UIActivityTypeMessageto excludedarray 。但是明天如果用戶添加更多專案excludedArray,例如print,那么基于此我必須能夠添加UIActivityTypePrint到excluded陣列中。如何做到這一點?
uj5u.com熱心網友回復:
將 UIActivityType 列舉值與您將使用 switch case 提供給用戶的選擇鏈接。
在選擇/取消選擇時更新陣列。
最后將列舉陣列傳遞給excludeActivityTypes。
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}
目標 c - 替代方案(您可以使用 if else 陳述句,因為目標 c 不支持 switch 案例的字串)
-(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;}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/449255.html
標籤:IOS 目标-c 苹果手机 代码 uiactivityviewcontroller
