2010-03-11 10 views
16

J'ai un TableView avec TableCellViews personnalisé avec UILabels et UIButtons. lorsque l'un des boutons est enregistré Je veux afficher une "info-bulle" décrivant le texte du bouton.convertPoint: toView: ne semble pas fonctionner

La plupart du temps fonctionne sauf lorsque j'essaie de convertir les coordonnées du centre de l'UIButton aux coordonnées de la vue root qui est un UIView.

Voici le code:

- (void) fancyLabelButtonPressed: (UIButton *) button { 
    CGPoint btnPoint = button.center; // x=200.5 y=27.5 
    CGPoint rootViewPoint = [button convertPoint:btnPoint toView:rootView]; 
    // rootViewPoint -> x=390.5 y=197.5 
    CGPoint pointToUse = CGPointMake(btnPoint.x +20, rootViewPoint.y - 23); // Hack to get it close 
} 

Comment rootViewPoint.x=390.5 quand je suis en mode portrait !!? En utilisant le x du bouton et le y de rootViewPoint je me rapproche de ce qu'il devrait être mais c'est juste un hack.

Est-ce que quelqu'un voit ce que je fais mal? ou y a-t-il un meilleur moyen?

Répondre

49

Cela est dû au fait que vous convertissez le point de la mauvaise vue. La propriété center est en fait dans le système de coordonnées de la vue supérieure du bouton, quelle qu'elle soit, donc quand vous la convertissez en rootView, vous devez la convertir à partir de là. Donc:

rootViewPoint = [[button superview] convertPoint:btnPoint toView:rootView]; 

Cela devrait vous donner ce que vous cherchez.