cómo usar la acción uibutton en uicollectionview cell y get el contenido de cell

Después de una gran cantidad de búsquedas no pude descifrar mi problema. Soy nuevo en el desarrollo de iOS, así que no te importe si estoy equivocado … :PAG 🙂

Tengo un button en la celda de vista de colección, cuando se pulsa el button, debe cambiar su image de background y get el contenido de la celda en la que se presiona el button de celda.

lo estoy haciendo así

en mi file .h

@interface MyCell : UICollectionViewCell @property (nonatomic, strong) UIButton *button; @end @interface DetailInvoicing : UIViewController 

en el file .m

 @implementation MyCell - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.button = [UIButton buttonWithType:UIButtonTypeCustom]; self.button.frame = CGRectMake(175, 1, 50, 30); self.button.backgroundColor = [UIColor clearColor]; [self.button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; [self.button setBackgroundImage:[UIImage imageNamed:@"buy.png"]forState:UIControlStateNormal]; [self.contentView addSubview:self.button]; } return self; } - (void)buttonClicked:(UIButton *)sender { NSLog(@"button clicked!"); self.button.backgroundColor = [UIColor lightGrayColor]; [self.button setTitle:@"Sold" forState:UIControlStateNormal]; [self.button setBackgroundImage:[UIImage imageNamed:nil]forState:UIControlStateNormal]; } @end 

en el método viewdidload

 [self CollectionLoad]; 

y el método CollectionLoad es

 // Use sqlite query to fetch data and save it in array, then myCollection.delegate = self; myCollection.dataSource = self; [myCollection reloadData]; myCollection.backgroundColor=[UIColor clearColor]; [myCollection registerClass:[MyCell class] forCellWithReuseIdentifier:@"CellID"]; 

entonces

 use datasource and delegate methods 

al grabar el button del button de celda deseado, se cambia la image de BG. y también hay algún button de otra celda aleatoria La image de background se cambia …

¿Cuál es el problema aquí y lo segundo?

Cómo get el contenido de la celda en este button …

Sus problemas son la reutilización y la gestión de datos.

En primer lugar, está reutilizando células al eliminarlas de un grupo. A continuación, agrega un nuevo button con la configuration pnetworkingeterminada. Por lo tanto, cada vez que se reutilice la celda, se agregará un nuevo button (incluso si ya hay uno) y no se le dará ninguna configuration especial (parte de su problema de gestión de datos).

Para la gestión de datos, simplemente cambiar el estado de un button no es suficiente; también necesita actualizar su model de datos con el nuevo estado representado por la selección del button. Luego, la próxima vez que muestre ese estado, puede establecerlo en el valor correcto.

El enfoque general que debe seguir es subclass UICollectionViewCell para que pueda agregar su button (solo una vez). La subclass de celda debe ser el objective del button (no el controller). La subclass de celda también podría tener una @property que es la parte del model de datos asociada a ella, de modo que puede actualizar el contenido cuando se toca el button. Y, cuando la propiedad está configurada, la celda puede actualizarse basándose en el contenido (configure la configuration de button apropiada). Alternativamente, la célula podría devolver la llamada al controller con la información apropiada (y el controller podría configurar el button en los methods de fuente de datos).