Как отобразить лист действий общего доступа iOS 6 по умолчанию с доступными параметрами общего доступа?

97

В некоторых приложениях в iOS 6 отображается лист действий по умолчанию с параметрами общего доступа.

В Social Framework есть только два класса: один для создания и один для запроса.

Однако я обнаружил, что с помощью SLComposeViewController можно составить конкретную службу, и перед тем, как показать это, я должен вручную запросить, доступна ли служба. И затем мне также нужно создать свой собственный лист действий с собственными значками.

Как эти приложения отображают этот лист действий по умолчанию для параметров общего доступа в iOS 6? Или они используют фреймворк с открытым исходным кодом?

лягушка
источник
Я хочу открыть общий лист с настраиваемым значком, например wechat, weibo, qq, и интегрировать его функциональность, как я могу это сделать?
Ravi Ojha
Просто проверьте также эту ссылку .. stackoverflow.com/a/35267035/3908884
Встречайте Доши

Ответы:

223

Контроллер UIActivityViewController заявил в другом ответе делает это тривиально. Все, что вам нужно сделать, это указать текст / изображение / URL-адрес, которым вы хотите поделиться, и представить контроллер представления активности модально, и iOS автоматически отобразит все применимые службы обмена. Примеры:

Цель-C

- (void)shareText:(NSString *)text andImage:(UIImage *)image andUrl:(URL *)url
{
    NSMutableArray *sharingItems = [NSMutableArray new];

    if (text) {
        [sharingItems addObject:text];
    }
    if (image) {
        [sharingItems addObject:image];
    }
    if (url) {
        [sharingItems addObject:url];
    }

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

Swift

func share(sharingText: String?, sharingImage: UIImage?, sharingURL: URL?) {
    let sharingItems:[AnyObject?] = [
                                        sharingText as AnyObject,
                                        sharingImage as AnyObject,
                                        sharingURL as AnyObject
                                    ] 
    let activityViewController = UIActivityViewController(activityItems: sharingItems.compactMap({$0}), applicationActivities: nil)
    if UIDevice.current.userInterfaceIdiom == .pad {
        activityViewController.popoverPresentationController?.sourceView = view
    }
    present(activityViewController, animated: true, completion: nil)
}
Мик МакКаллум
источник
6
Хорошая правка для версии Swift. Я бы изменил .append (item) на + = item. Выглядит более стремительно
Игнасио Инглезе
2
В последней версии Swift замените AnyObject[]()на[AnyObject]()
Ruben Martinez Jr.
5
Он работает только после входа в соответствующие учетные записи в настройках (facebook / twitter), но в приложении для фотографий / приложении Notes параметры доступны, даже если пользователь не вошел в систему. Не могли бы вы объяснить, почему это так? Или есть другой обходной путь?
Джалдип Катре
4
Я добавил правку для поддержки iOS 8 на iPad - вам также нужно настроить UIActivityViewController's, UIPopoverControllerиначе он выйдет из строя present…. До сих пор у меня было два отклонения из трех по редактированию, поэтому, предполагая, что оно отклонено, возможно, вы могли бы увидеть, хотите ли вы добавить редактирование самостоятельно. Или нет :-)
Бенджон
О, редакция цитирует этот ответ, который все объясняет.
Benjohn
39

Добавьте это, чтобы использовать UIActivityViewController.

-(IBAction)shareButtonPressed:(id)sender {

    NSLog(@"shareButton pressed");

    NSString *texttoshare = _txt; //this is your text string to share
    UIImage *imagetoshare = _img; //this is your image to share
    NSArray *activityItems = @[texttoshare, imagetoshare];    
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
    activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePrint];
    [self presentViewController:activityVC animated:TRUE completion:nil];
}
Давиде
источник
2
Предпочтительный ответ для меня, так как вы также показываете исключение.
Хосе