Je voulais changer la couleur du bouton moins et supprimer le bouton de UITableViewCell
en cliquant sur le bouton modifier ou en balayant UITableView
lignes. J'ai implémenté ce code jusqu'à présent:
-(IBAction)doEdit:(id)sender
{
[[self keyWordsTable] setEditing:YES animated:NO];
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
}
iOS 8 et 9 ( accessoires pour cet article )
Remarque: Si vous travaillez avec un projet iOS 7 existant, vous devrez mettre à jour la cible vers iOS 8 pour obtenir cette fonctionnalité. N'oubliez pas non plus de définir UITableviewDelegate.
Toute la magie opère maintenant ici (autant de boutons que vous le souhaitez aussi !!!!):
-(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewRowAction *button = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Button 1" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
{
NSLog(@"Action to perform with Button 1");
}];
button.backgroundColor = [UIColor greenColor]; //arbitrary color
UITableViewRowAction *button2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Button 2" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
{
NSLog(@"Action to perform with Button2!");
}];
button2.backgroundColor = [UIColor blueColor]; //arbitrary color
return @[button, button2];
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
// you need to implement this method too or nothing will work:
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
(iOS 7)
**activate the delete button on swipe**
// make sure you have the following methods in the uitableviewcontroller
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"You hit the delete button.");
}
définir une étiquette de texte personnalisée au lieu de supprimer.
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
return @"Your Label";
}
définir une couleur personnalisée pour le bouton partie 1 - avertissement, cela implique techniquement de fouiller dans l'API privée Apple. Cependant, vous n'êtes pas empêché de modifier une sous-vue à l'aide d'un recherche de méthode publique faisant partie de UIKIT.
Créez une classe uitableviewcell (voir aussi https://stackoverflow.com/a/22350817/1758337 )
- (void)layoutSubviews
{
[super layoutSubviews];
for (UIView *subview in self.subviews) {
//iterate through subviews until you find the right one...
for(UIView *subview2 in subview.subviews){
if ([NSStringFromClass([subview2 class]) isEqualToString:@"UITableViewCellDeleteConfirmationView"]) {
//your color
((UIView*)[subview2.subviews firstObject]).backgroundColor=[UIColor blueColor];
}
}
}
}
Autre remarque: rien ne garantit que cette approche fonctionnera dans les futures mises à jour. Sachez également que mentionner ou utiliser la classe privée UITableViewCellDeleteConfirmationView
peut entraîner le rejet de l'AppStore.
définir la couleur personnalisée pour la partie 2 du bouton
de retour dans votre uitableviewcontroller
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
[YourTableView reloadData];
}
(La couleur alternative ne sera pas appelée jusqu'à ce que la prochaine fois que layoutSubviews soit appelé sur la tablette, nous nous assurons donc que cela se produit en rechargeant tout.)
ITableViewDelegate docs ( editActionsForRowAtIndexPath méthode)
Valeur de retour
Un tableau d'objets UITableViewRowAction représentant les actions de la ligne. Chaque action que vous fournissez est utilisée pour créer un bouton sur lequel l'utilisateur peut appuyer.
Discussion
Utilisez cette méthode lorsque vous souhaitez fournir des actions personnalisées pour l'une de vos lignes de tableau. Lorsque l'utilisateur glisse horizontalement sur une ligne, la vue tableau déplace le contenu de la ligne de côté pour révéler vos actions. Appuyer sur l'un des boutons d'action exécute le bloc de gestionnaire stocké avec l'objet action.
Si vous n'implémentez pas cette méthode, la vue du tableau affiche les boutons d'accessoires standard lorsque l'utilisateur balaie la ligne.
Exemple de travail dans Swift:
@available(iOS 8.0, *)
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
let button1 = UITableViewRowAction(style: .Default, title: "Happy!") { action, indexPath in
print("button1 pressed!")
}
button1.backgroundColor = UIColor.blueColor()
let button2 = UITableViewRowAction(style: .Default, title: "Exuberant!") { action, indexPath in
print("button2 pressed!")
}
button2.backgroundColor = UIColor.redColor()
return [button1, button2]
}
func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return true
}
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
}
première fois que vous appelez willTransitionToState en .m (cellule personnalisée)
- (void)willTransitionToState:(UITableViewCellStateMask)state{
NSLog(@"EventTableCell willTransitionToState");
[super willTransitionToState:state];
[self overrideConfirmationButtonColor];
}
Vérifiez la version iOS, c'est ici, j'utilise iOS 7 - iOS8
//at least iOS 8 code here
- (UIView*)recursivelyFindConfirmationButtonInView:(UIView*)view
{
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) {
// iOS 8+ code here
for(UIView *subview in view.subviews) {
if([NSStringFromClass([subview class]) rangeOfString:@"UITableViewCellActionButton"].location != NSNotFound)
return subview;
UIView *recursiveResult = [self recursivelyFindConfirmationButtonInView:subview];
if(recursiveResult)
return recursiveResult;
}
}
else{
// Pre iOS 8 code here
for(UIView *subview in view.subviews) {
if([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationButton"]) return subview;
UIView *recursiveResult = [self recursivelyFindConfirmationButtonInView:subview];
if(recursiveResult) return recursiveResult;
}
}
return nil;
}
-(void)overrideConfirmationButtonColor
{
dispatch_async(dispatch_get_main_queue(), ^{
UIView *confirmationButton = [self recursivelyFindConfirmationButtonInView:self];
if(confirmationButton)
{
UIColor *color = UIColorFromRGB(0xFF7373);
confirmationButton.backgroundColor = color;
}
});
}
Impossible d'utiliser l'API publique.
Pour le bouton Supprimer, vous pouvez utiliser une implémentation personnalisée, telle que SWTableViewCell , pour modifier la couleur du bouton, ainsi que pour en ajouter d'autres.
Ancienne question, mais je suis sûr que certaines personnes prennent en charge iOS 7. Pour modifier la couleur d'arrière-plan du bouton Supprimer, vous devez créer la classe "UITableViewCell" ou l'étendre. alors vous pouvez utiliser
- (void)layoutSubviews
{
[super layoutSubviews];
for (UIView *subview in self.subviews) {
for(UIView *childView in subview.subviews){
if ([childView isKindOfClass:[UIButton class]]) {
childView.backgroundColor = [UIColor blueColor];
}
}
}
}