2009-06-06 3 views
4

Mon application fonctionne parfaitement sur le simulateur et sur l'iPhone OS 2.2.1. Mais j'ai aussi un appareil avec iPhone OS 3.0 installé. Et quand j'appuie sur un bouton de divulgation, la méthode accessoryButtonTappedForRowWithIndexPath n'est pas appelée, mais la couleur d'un bouton de divulgation devient plus sombre.accessoryButtonTappedForRowWithIndexPath n'est pas appelé

Est-ce que quelqu'un a fait face à un tel problème?

Comment puis-je résoudre ce problème?

Répondre

1

Maintenant que OS 3.0 est officiellement la porte:

Le problème est avec la propriété accessoryType de UITableViewCell. Utilisez la méthode tableView: accessoryTypeForRowWithIndexPath: delegate à la place, tant que vous ciblez OS 2.x et OS 3.x.

0

Malheureusement, "accessoryTypeForRowWithIndexPath" a été abandonné.

L'indice du comportement différent (entre UITableViewCellAccessoryDisclosureIndicator et UITableViewCellAccessoryDetailDisclosureButton) est que l'INDICATEUR de divulgation ne «suit» pas alors que le BOUTON de divulgation «suit».

Qu'est-ce que vous auriez à faire est de fournir votre propre reconnaissance de l'utilisateur lorsque exploité dans la cellule et l'utiliser dans le cadre du code supplémentaire pour ensuite appeler dans votre

- (void)tableView:(UITableView*) tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath*) indexPath 

routine - qui est ce qui se passe avec le BOUTON de divulgation.

Vous pouvez utiliser quelque chose comme un UITapGestureRecognizer attaché à un AccessoryView dans votre cellule personnalisée. Cette chose est normalement NIL, de sorte que vous auriez besoin d'ajouter un UIView dans la cellule via IB ou par programmation - le redimensionner - et le connecter à votre objet cellulaire. Ensuite, vous ajouterez du code à la fonction - (id)initWithStyle:(UITableViewCellStyle) style reuseIdentifier:(NSString*) reuseIdentifier de votre cellule personnalisée.

L'idée générale est présentée ci-dessous.

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] 
    initWithTarget:myAccessoryView action:@selector(didTap:)]; 
    tapGesture.delegate = (id <UIGestureRecognizerDelegate>)myTableViewControllerDelegate; 
    [containerView addGestureRecognizer:tapGesture]; 
    [tapGesture release]; 

Le « didTap: » fonction transmettra ensuite votre code ou à faire exactement ce que vous pourriez avoir fait dans l'autre routine.

Il est triste que les trois différents accessoires soient traités différemment. Donc, si vous ne voulez pas d'un truc bleu géant dans votre cellule, il semblerait que vous deviez trouver du code supplémentaire pour que les choses fonctionnent comme vous le souhaitez. L'un des avantages de l'utilisation d'AccessoryView dans votre cellule personnalisée est que vous pouvez placer une UIImageView dans la vue, puis déposer une image dans UIImageView, ce qui signifie que vous pouvez utiliser n'importe quelle image par rapport à la simple ">".

Questions connexes