UIimageView et Acessory View fonctionnent séparément dans TableViewCell

Je travaille sur une application similaire à l'application Apple callbacks. J'ai une tableView avec des données. La cellule possède une vue accessoire UIImageView et Disclosure Indicator. Lorsque l'une de ses lignes est sélectionnée, un controller de vue est poussé.

Je voudrais que l'UIImageView de chaque ligne fonctionne séparément de la sélection de ligne comme c'est dans l'application de callbacks d'Apple. Comment puis je faire ça?

J'ai essayé UIimageview comme subview pour la cellule et ai ajouté UITapGestureRecognizer à lui. Cela a bien fonctionné avec la dernière ligne insérée, mais pas avec les autres lignes.

Plutôt que de sous-classr UIImageView, vous pouvez envisager de sous-classr UITableViewCell. Dans votre sous-class, vous pouvez toujours append un UITapGestureRecognizer à UIImageView, mais vous ciblez une méthode sur la sous-class de votre cellule (plutôt que sur votre controller de table, bien que vous n'ayez pas dit ce que le gestionnaire cible actuellement).

Ajoutez un tapRecognizer à UIImageView de votre cellule personnalisée, et un indicateur BOOL sur votre cellule personnalisée (par exemple, imageViewTapped). Dans votre gestionnaire d'access, définissez imageViewTapped sur YES.

Maintenant, votre controller tableView va encore recevoir des appels pour didSelectRowWithIndexPath, que le tap soit ou non sur l'imageVIew. Ainsi, dans didSelectRowAtIndexPath, évaluez la propriété imageViewTapped de la cellule personnalisée. Si l'indicateur a été défini, appuyez sur viewController A (pour le comportement imageView) sur votre stack de navigation. Si imageViewTapped == NO, appuyez sur viewController B (probablement ce que vous êtes en train de faire).

@Adel. Vous pouvez mettre un button transparent sur l'imageView pour répondre au toucher de l'user.

CGRect imageRect = (CGRect){100, 100, 100, 100}; UIImageView *imageView = [[[UIImageView alloc] initWithFrame:imageRect] autorelease]; imageView.backgroundColor = [UIColor yellowColor]; [self.view addSubview:imageView]; imageView.userInteractionEnabled = YES; UIButton *maskBtn = [UIButton buttonWithType:UIButtonTypeCustom]; maskBtn.frame = imageView.bounds; maskBtn.backgroundColor = [UIColor clearColor]; [maskBtn addTarget:self action:@selector(maskBtnDidClick:) forControlEvents:UIControlEventTouchUpInside]; [imageView addSubview:maskBtn]; 

Notez que userInteractionEnabled de imageView est NO par défaut. L'espoir aide. 🙂