objective-c uiactionsheet

objective c - ¿Cómo personalizar UIActionSheet? iOS



objective-c (7)

¿Es posible crear una ActionSheet que tenga una etiqueta entre dos botones como esta imagen?

Realmente necesito esto ahora mismo. ¿Alguien puede ayudarme? Gracias.


Sólo iba a agregar un pequeño comentario, pero no puedo hacer ningún comentario, así que publicaré una respuesta completa. Si desea evitar los errores de IOS7 CGContextSetFillColorWithColor: contexto 0x0 no válido. Este es un error grave, etc. Puede usar lo siguiente.

self.actionSheet = [[UIActionSheet alloc] initWithTitle:@"" delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];

Sin embargo, eso estropeará el gráfico / dibujo en la parte superior de su hoja de acción, como lo dijo @Max, por lo que si aún no tiene un fondo que está agregando, simplemente agregue este código para darle el aspecto de la hoja de acción predeterminada.

UIView *background = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; background.backgroundColor = [UIColor colorWithRed:204.0/255.0 green:204.0/255.0 blue:204.0/255.0 alpha:1]; [self.actionSheet addSubview:background];

a continuación, agregue lo que desee a su hoja de acción personalizada.


Si aún estás luchando con esto, quizás esta biblioteca te pueda ayudar: https://github.com/danielsaidi/Sheeeeeeeeet

Está escrito en Swift y te permite crear hojas de acción personalizadas. Tiene soporte incorporado para muchos artículos diferentes y puede ampliarse y rediseñarse.




https://github.com/xmartlabs/XLActionController nos permite crear cualquier hoja de acción personalizada que ofrezca mucha más flexibilidad que las soluciones propuestas anteriormente.

Estos son algunos ejemplos incluidos en el repositorio github.


    EDITAR 2018

    Publiqué este código en iOS4 cuando era potencialmente útil. El desarrollo de iOS ha crecido de manera asombrosa desde entonces, ¡no uses este código a menos que estés escribiendo una aplicación para iOS4 por cualquier motivo! ¡Por favor, consulte la maravillosa Controladora de Acción XLR de la biblioteca de terceros para sus necesidades de hojas de acción!

    ¡Es ciertamente posible, y me gusta hacer esto todo el tiempo!

    Primero, haga una @property de un UIActionSheet (en este ejemplo, el mío se llama aac , esto es útil especialmente si desea llamarlo por UITextFields .

    A continuación, en el método que -(IBAction)userPressedButton:(id)sender , diga un -(IBAction)userPressedButton:(id)sender , cree una instancia local de la -(IBAction)userPressedButton:(id)sender .

    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];

    Luego self.aac = actionsheet a tu propiedad: self.aac = actionsheet

    Ahora, básicamente, tienes todo el reinado para hacer algo en esta Hoja de Acción, te daré una forma abreviada de lo que hice para un proyecto reciente:

    - (IBAction)sendDataButtonPressed:(id)sender { UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; self.aac = actionSheet; UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"actionsheet_bg.png"]]; [background setFrame:CGRectMake(0, 0, 320, 320)]; background.contentMode = UIViewContentModeScaleToFill; [self.aac addSubview:background]; UIButton *cancelButton = [UIButton buttonWithType: UIButtonTypeCustom]; cancelButton.frame = CGRectMake(0, 260, 320, 50); [cancelButton setBackgroundImage:[UIImage imageNamed:@"actionsheet_button.png"] forState: UIControlStateNormal]; [cancelButton addTarget:self action:@selector(cancelButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; cancelButton.adjustsImageWhenHighlighted = YES; [cancelButton setTitle:@"Cancel" forState:UIControlStateNormal]; [cancelButton setTitleColor:[UIColor colorWithRed:0/255.0f green:177/255.0f blue:148/255.0f alpha:1.0f] forState:UIControlStateNormal]; cancelButton.titleLabel.textAlignment = NSTextAlignmentCenter; cancelButton.titleLabel.font = [UIFont fontWithName: @"SourceSansPro-Light" size: 25]; [self.aac addSubview: cancelButton]; UIButton *emailResultsButton = [UIButton buttonWithType: UIButtonTypeCustom]; emailResultsButton.frame = CGRectMake(25, 12, 232, 25); [emailResultsButton addTarget:self action:@selector(emailResultsTapped:) forControlEvents:UIControlEventTouchUpInside]; emailResultsButton.adjustsImageWhenHighlighted = YES; [emailResultsButton setTitle:@"Email Results" forState:UIControlStateNormal]; [emailResultsButton setTitleColor:[UIColor colorWithRed:255/255.0f green:255/255.0f blue:255/255.0f alpha:1.0f] forState:UIControlStateNormal]; [emailResultsButton setTitleColor:[UIColor colorWithRed:0/255.0f green:177/255.0f blue:148/255.0f alpha:1.0f] forState:UIControlStateHighlighted]; emailResultsButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; emailResultsButton.titleLabel.font = [UIFont fontWithName: @"SourceSansPro-Light" size: 20]; [self.aac addSubview: emailResultsButton]; // lots of other buttons... // then right at the end you call the showInView method of your actionsheet, and set its counds based at how tall you need the actionsheet to be, as follows: [self.aac showInView:self.view]; [self.aac setBounds:CGRectMake(0,0,320, 600)];

    Aquí hay una imagen de lo que sucede (recuerde que omití todos los otros botones en el ejemplo de código, pero se muestran aquí):

    Ahora, si desea descartar la ActionSheet (dependiendo de cómo configure la estructura de su botón, o quizás use una Barra de herramientas) (muy común), puede hacerlo en la acción de selección del botón, haga lo siguiente:

    -(void)cancelButtonClicked:(id)sender { [self.aac dismissWithClickedButtonIndex:0 animated:YES]; }

    Además, solo para su información, obtener todas las dimensiones adecuadas para su diseño tomará un poco de tiempo, ya que no está trabajando con la vista de su UIView principal de su UIViewController, en lugar de la vista de la ActionSheet, por lo que tiene diferentes dimensiones.

    Un truco que hago es diseñar la hoja de acciones en el Guión gráfico con una vista UIV, luego colocar todos los objetos que desee en su "hoja de acciones" en esa vista UIV, y debe obtener las dimensiones precisas de todas las imágenes.

    Déjame saber si necesitas una aclaración, buena suerte!


    UIButton* button = (UIButton*)sender; actionSheet = [[UIActionSheet alloc] initWithTitle:@"Share the PNR Status" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Send Message",@"Send Email",@"Facebook",nil]; [[[actionSheet valueForKey:@"_buttons"] objectAtIndex:0] setImage:[UIImage imageNamed:@"chat.png"] forState:UIControlStateNormal]; [[[actionSheet valueForKey:@"_buttons"] objectAtIndex:1] setImage:[UIImage imageNamed:@"email.png"] forState:UIControlStateNormal]; [[[actionSheet valueForKey:@"_buttons"] objectAtIndex:2] setImage:[UIImage imageNamed:@"facebook_black.png"] forState:UIControlStateNormal]; //*********** Cancel [[[actionSheet valueForKey:@"_buttons"] objectAtIndex:3] setImage:[UIImage imageNamed:@"cancel.png"] forState:UIControlStateNormal]; [actionSheet showFromRect:button.frame inView:self.view animated:YES];