2010-10-24 11 views

Respuesta

14

De ShareKit/Core/SHK.m:

[SHK setFavorites: (NSArray *)favs forType:(SHKShareType)type] 

+ (void)setFavorites:(NSArray *)favs forType:(SHKShareType)type 
{ 
    [[NSUserDefaults standardUserDefaults] setObject:favs forKey:[NSString stringWithFormat:@"%@%i", SHK_FAVS_PREFIX_KEY, type]]; 
} 

favoritos es como:

[NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook",@"SHKReadItLater",nil] 

tipo es SHKShareType:

typedef enum 
{ 
    SHKShareTypeUndefined, 
    SHKShareTypeURL, 
    SHKShareTypeText, 
    SHKShareTypeImage, 
    SHKShareTypeFile 
} SHKShareType; 
49

en SHK.m encuentra esto Método

+ (NSArray *)favoriteSharersForType:(SHKShareType)type 

y cambiar

switch (type) 
    { 
     case SHKShareTypeURL: 
      favoriteSharers = [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook",@"SHKReadItLater",nil]; 
      break; 

     case SHKShareTypeImage: 
      favoriteSharers = [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook",@"SHKReadItLater",nil]; 
      break; 

     case SHKShareTypeText: 
      favoriteSharers = [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook",@"SHKReadItLater",nil]; 
      break; 

     case SHKShareTypeFile: 
      favoriteSharers = [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook",@"SHKReadItLater",nil]; 
      break; 

a la siguiente para cada instancia de la sentencia switch:

favoriteSharers = [NSArray arrayWithObjects:@"SHKFacebook", nil]; 

o lo que otras opciones que desee apoyar (es decir, si solo deseas twitter y Facebook agregan @ "SHKTwitter", a la matriz)

que eliminarán los otros opti ons pero la hoja de acción que muestra las opciones no reflejará el cambio y aún dará la opción más, que también tenemos que deshabilitar.

Así que hacer que ir a SHKActionSheet.m

en este método se puede cambiar el título de "Compartir" a algo más específico (esta parte es opcional), es decir "Compartir con Facebook y Twitter"

+ (SHKActionSheet *)actionSheetForType:(SHKShareType)type 

cambio

SHKActionSheet *as = [[SHKActionSheet alloc] initWithTitle:SHKLocalizedString(@"PUT YOUR NEW TITLE HERE") 
                delegate:self 
             cancelButtonTitle:nil 
            destructiveButtonTitle:nil 
             otherButtonTitles:nil]; 
as.item = [[[SHKItem alloc] init] autorelease]; 
as.item.shareType = type; 

que en ese mismo método para suprimir esta línea

// Add More button 
[as addButtonWithTitle:SHKLocalizedString(@"More...")]; 

que eliminará el botón más, pero ahora el código de ahora va a confundir el botón más con el botón de cancelación, por lo que arreglar eso, ir a este método:

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated 

y eliminar la siguiente sentencia else if

// More 
else if (buttonIndex == sharers.count) 
{ 
    SHKShareMenu *shareMenu = [[SHKCustomShareMenu alloc] initWithStyle:UITableViewStyleGrouped]; 
    shareMenu.item = item; 
    [[SHK currentHelper] showViewController:shareMenu]; 
    [shareMenu release]; 
} 

lo que se pretende hacer con este método es tomar el botón que normalmente es el botón más y abrir más opciones. Por lo tanto, al eliminarlo, el código no tiene acción asociada con el botón cancelar, por lo que simplemente cierra y libera la hoja de acción, creando efectivamente un botón cancelar

+0

Ojalá pudiera darle 10 votos favorables para una explicación tan completa. Esto es exactamente lo que necesitaba, ¡gracias! –

+0

¡Qué gran respuesta! Lo mejor que he visto en SO desde hace un tiempo ... y por alguien con baja reputación como yo! –

+0

excelente explicación ... más 10 uppvotes – Hadi

2

Consulte my answer en el otro tema con una explicación más detallada.

ahora es fácilmente configurable sin cambiar el código de ShareKit, si utiliza ShareKit 2.0

Básicamente, si sólo utiliza Facebook y Twitter, es más fácil que no se meta con el código de ShareKit. Puede fácilmente crear su propia UIActionSheet con dos botones y llamar a los métodos ShareKit's convenience share.

+0

pregunto por qué votar? Con "meterse con el código de ShareKit" me refiero a personalizar el código de ShareKit en su aplicación (ocultando el botón Más), cuando no es necesario. Esto le generará trabajo adicional si desea actualizar a una versión más nueva de ShareKit. Puede lograr lo mismo utilizando los métodos de conveniencia de los participantes de ShareKit directamente con UIActionSheet estándar clásico. –

2

Para que los servicios no deseados no aparezcan en la hoja de acciones, simplemente puede eliminar las respectivas clases de servicios compartidos del proyecto.

Ir al proyecto -> Compartidores -> Servicios -> seleccione los archivos .h y .m del servicio respectivo y elimínelos.

Por ejemplo, la opción Facebook se puede eliminar mediante la eliminación de SHKFacebook.hy SHKFacebook.m.

Nota: Deberá verificar la importación de la clase para evitar errores.

7

La nueva manera de hacer esto con la última versión de ShareKit 2.0 es para sobrescribir los métodos siguientes en su SHKConfigurator (extendiendo DefaultSHKConfigurator.m)

// SHKActionSheet settings 
- (NSNumber*)showActionSheetMoreButton { 
    return [NSNumber numberWithBool:true];// Setting this to true will show More... button in SHKActionSheet, setting to false will leave the button out. 
} 

/* 
Favorite Sharers 
---------------- 
These values are used to define the default favorite sharers appearing on ShareKit's action sheet. 
*/ 
- (NSArray*)defaultFavoriteURLSharers { 
    return [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook", @"SHKReadItLater", nil]; 
} 
- (NSArray*)defaultFavoriteImageSharers { 
    return [NSArray arrayWithObjects:@"SHKMail",@"SHKFacebook", @"SHKCopy", nil]; 
} 
- (NSArray*)defaultFavoriteTextSharers { 
    return [NSArray arrayWithObjects:@"SHKMail",@"SHKTwitter",@"SHKFacebook", nil]; 
} 
0

La manera más fácil es editar "SHKSharers.plist" y mantener los servicios que necesitas

Cuestiones relacionadas