2009-12-08 6 views
0

J'ai un UIScrollView sur l'écran.iPhone + UIScrollView

La vue de défilement contient une vue dans laquelle se trouvent les UIButtons. Le problème est que tout en faisant défiler la vue, si j'appuie sur un bouton entre les deux, mon affichage défilera en haut ou en bas de l'écran, cela signifie qu'il ne restera pas à l'endroit où j'ai appuyé sur le bouton.

+0

Salut mec! Cela vous dérangerait-il d'attirer votre attention sur votre propre question et de commenter les réponses qu'Alan et moi vous avons données? –

Répondre

2

Jetez un coup d'œil à la classe UIScrollViewDelegate. Vous voulez désactiver les boutons pendant que le défilement commence à l'activer lorsque le défilement est terminé.

+0

Vous êtes comme une sorte de télépathe devinant de quoi parlait vraiment l'auteur dès le premier coup ... :) –

+0

Je souhaite. :) C'était plus une question de "été là, fait cela" et ne voulait pas voir quelqu'un d'autre souffrir du problème. –

0

Si je comprends bien, vos boutons sont dans le scrollview? Et lorsque vous appuyez dessus, vous voulez qu'ils arrêtent le défilement ou déplacent le scrollview à un point spécifique? Comme le haut ou le bas? Si oui, utilisez myScrollView.contentOffset = CGPointMake(0, 0); et spécifiez les valeurs x et y dont vous avez besoin. Donc (0, 0) dans cet exemple serait le coin supérieur gauche. Vous pouvez également essayer [myScrollView setContentOffset:CGPointMake(0, 0) animated:YES]; si vous souhaitez animer cette transition.

1

J'ai reproduit la situation que vous avez décrite dans votre question (du moins je le pense): un UIScrollView, un UIView dans UIScrollView et un UIButton dans l'UIView.

J'ai essayé d'attacher du ruban adhésif en touchant la vue de défilement et en déplaçant mon doigt sur le bouton et je n'ai pas réussi à rebondir vers le haut ou quelque chose comme ça. J'ai également essayé d'appuyer sur le bouton après avoir fait défiler le défilement et il n'y avait pas d'effets secondaires aussi. Donc, je suppose que ce que vous avez affaire est quelque chose comme ceci: un UINavigationController avec vous UIScroll-UIView-UIButton UIViewController comme un contrôleur de vue racine; après avoir tapé le UIButton pousse un nouveau UIViewController à l'UINavigationController; alors vous revenez au précédent UIViewController dans la pile UINavigationController et c'est quand vous perdez la position de défilement.

Si mon estimation est correcte, voici ce que vous devez faire.

Avant de pousser une nouvelle UIViewController sauvegarde vous faites défiler le contenu actuel de vue décalé par le code suivant:

[[NSUserDefaults standardUserDefaults] setObject:NSStringFromCGPoint(theScrollView.contentOffset) forKey:@"ScrollViewLastContentOffset"]; 

Et une fois que vous revenez à vous UIScrollView UIViewController utilisez le code suivant en vous viewWillAppear: Méthode:

- (void)viewWillAppear:(BOOL)animated { 
[super viewWillAppear:animated]; 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if ([defaults stringForKey:@"ScrollViewLastContentOffset"] != nil) { 
    theScrollView.contentOffset = CGPointFromString([defaults stringForKey:@"ScrollViewLastContentOffset"]); 
    [defaults removeObjectForKey:@"ScrollViewLastContentOffset"]; 
} 
} 

Même si ma supposition fausse s'il vous plaît commenter ma réponse et Alan et les confirmer/réfuter pour que nous puissions vous aider. Pourriez-vous également fournir plus de détails sur votre problème afin que nous n'ayons pas besoin de deviner ce qui se passe exactement plus.

Questions connexes