example ios objective-c uinavigationcontroller uibarbuttonitem

ios - example - Cómo establecer UIBarButtonItem Image al hacer clic en tres niveles



navigation controller swift 4 example (1)

EDITAR: Como resulta, el remitente es una instancia de UIBarButtonItem

Para esta clase, utilice el método setBackgroundImage:forState:barMetrics: en reemplazo de setImage:forState: como en la publicación original siguiente, que corresponde a un UIButton . Enviar también el remitente a UIBarButtonItem

[(UIBarButtonItem*)sender setBackgroundImage:[UIImage imageNamed:@"scion.png"] forState:UIControlStateNormal barMetrics: UIBarMetricsDefault];

POST ORIGINAL: Asumir (id) remitente es la instancia UIButton que desea cambiar en el método denominado -cellToggleAction:(id)sender , encasillar remitente en un UIButton y luego llamar -setImage:forState: en él en la sentencia if.

Alternativamente, puede cambiar el método mencionado anteriormente para tener un argumento de tipo UIButton en lugar de id , a fin de evitar el encasillado y también hace que el código sea más legible.

un ejemplo podría ser -

- (IBAction)cellToggleAction:(UIButton*)sender { if([reuseIdentifier isEqualToString:@"SmallIcon"]) { reuseIdentifier=@"ListView"; [sender setImage:yourImage forState:UIControlStateNormal];// may need other states configured } else if .. // continue similarly

Hola, mi código actual es el siguiente y me gustaría saber cómo implementar un cambio de ícono de botón dentro de mi enunciado actual si es posible si esto no es posible, ¿qué código necesitaré usar en su lugar? Muchas gracias de antemano.

viewController.m

#import "GroupsViewController.h" #import "CustomCell.h" @interface GroupsViewController () { NSArray *arrayOfImages; NSArray *arrayOfDescriptions; } @end @implementation GroupsViewController { NSString *reuseIdentifier; } - (void)viewDidLoad { [super viewDidLoad]; [[self GroupsCollectionView]setDataSource:self]; [[self GroupsCollectionView]setDelegate:self]; reuseIdentifier= @"SmallIcon"; arrayOfImages = [[NSArray alloc]initWithObjects:@"?.png", nil]; arrayOfDescriptions = [[NSArray alloc]initWithObjects:@"?", nil]; } -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { return 1; } -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return [arrayOfDescriptions count]; } -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; [[cell IconImage]setImage:[UIImage imageNamed:[arrayOfImages objectAtIndex:indexPath.item]]]; [[cell IconLabel]setText:[arrayOfDescriptions objectAtIndex:indexPath.item]]; return cell; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; //Dispose of any resources that can be recreated. } - (IBAction)cellToggleAction:(id)sender { if([reuseIdentifier isEqualToString:@"SmallIcon"]){ reuseIdentifier=@"ListView"; [sender setImage:[UIImage imageNamed:@"scion.png"] forState:UIControlStateNormal]; } else if ([reuseIdentifier isEqualToString:@"ListView"]){ reuseIdentifier=@"LargeIcon"; [sender setImage:[UIImage imageNamed:@"subaru.png"] forState:UIControlStateNormal]; } else if ([reuseIdentifier isEqualToString:@"LargeIcon"]){ reuseIdentifier=@"SmallIcon"; [sender setImage:[UIImage imageNamed:@"lotus.png"] forState:UIControlStateNormal]; } [self.GroupsCollectionView reloadData]; } - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CGSize cellSize; if([reuseIdentifier isEqualToString:@"SmallIcon"]) cellSize = CGSizeMake(100, 130); else if ([reuseIdentifier isEqualToString:@"ListView"]) cellSize = CGSizeMake(320, 130); else if ([reuseIdentifier isEqualToString:@"LargeIcon"]) cellSize = CGSizeMake(320, 350); return cellSize; } @end

Después de implementar sus sugerencias actuales, recibo el siguiente mensaje de error:

[UIBarButtonItem setImage:forState:]: unrecognized selector sent to instance