program español developer descargar desarrollador apple xcode ios6 sharing

español - xcode 9.0 download



UIActivityViewController personaliza el texto según la actividad seleccionada (3)

Ejemplo de implementación Swift de una subclase UIActivityItemProvider. La opción de copia usará solo la contraseña, otros tipos de actividad utilizarán el texto completo. Debería ser fácil de personalizar para diferentes casos de uso. Gracias a Cristopher & NickNack por sus respuestas.

class PasswordShareItemsProvider: UIActivityItemProvider { private let password: String private var shareText: String { return "This is my password: " + password } init(password: String) { self.password = password // the type of the placeholder item is used to // display correct activity types by UIActivityControler super.init(placeholderItem: password) } override var item: Any { get { guard let activityType = activityType else { return shareText } // return desired item depending on activityType switch activityType { case .copyToPasteboard: return password default: return shareText } } } }

Uso:

let itemProvider = PasswordShareItemsProvider(password: password) let activityViewController = UIActivityViewController(activityItems: [itemProvider], applicationActivities: nil)

Quiero personalizar el texto para la misma información, pero cuando lo comparto en Facebook no quiero usar las etiquetas hash de twitter o el esquema @username ...

¿Cómo puedo diversificar el texto para compartir basado en qué servicio de intercambio se usaría?

Por supuesto que estoy usando UIActivityViewController:

UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[shareText, shareURL] applicationActivities:nil];


En lugar de pasar las cadenas de texto en la llamada initWithActivityItems , initWithActivityItems su propia subclase de la clase UIActivityItemProvider y cuando implemente el método itemForActivityType proporcionará el servicio compartido como el parámetro ''activityType''.

A continuación, puede devolver el contenido personalizado de este método.


Tomé esta respuesta e hice una clase simple para eso. El mensaje predeterminado se verá compartiendo puntos de venta que no sean Twitter, y las palabras de Twitter dentro de la matriz de hashWords aparecerán con valores hash si están presentes en el mensaje predeterminado. Pensé que podría compartirlo con cualquier otra persona que lo necesite. Gracias Christopher!

Uso:

TwitterHashActivityItemProvider *twit = [[TwitterHashActivityItemProvider alloc] initWithDefaultText:@"I really like and code" hashWords:@[@"", @"code"]]; NSArray *items = @[twit]; UIActivityViewController *act = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];

Encabezamiento:

@interface TwitterHashActivityItemProvider : UIActivityItemProvider - (id)initWithDefaultText:(NSString*)text hashWords:(NSArray*)hashItems; @property (nonatomic,strong) NSArray *hashItems; @end

Implementación:

#import "TwitterHashActivityItemProvider.h" @implementation TwitterHashActivityItemProvider - (id)initWithDefaultText:(NSString*)text hashWords:(NSArray*)hashItems; { self = [super initWithPlaceholderItem:text]; if ( self ) { self.hashItems = hashItems; } return self; } - (id)item { if ( [self.placeholderItem isKindOfClass:[NSString class]] ) { NSString *outputString = [self.placeholderItem copy]; // twitter gets some hash tags! if ( self.activityType == UIActivityTypePostToTwitter ) { // go through each potential hash item and augment the main string for ( NSString *hashItem in self.hashItems) { NSString *hashed = [@"#" stringByAppendingString:hashItem]; outputString = [outputString stringByReplacingOccurrencesOfString:hashItem withString:hashed]; } } return outputString; } // else we didn''t actually provide a string...oops...just return the placeholder return self.placeholderItem; } @end