2009-11-14 5 views
0

Je travaille sur un menu d'application. Le problème est maintenant que je ne peux pas faire fonctionner UIScrollView. L'UIScrollView est dans un fichier Xib. Il charge normal mais quand j'essaye de le faire défiler s'est écrasé.UIScrollView sur un UIViewController

Je pense que le problème est que j'utilise un UIViewController puisque lorsque je supprime le délégué non à lui-même, il fonctionne. Maintenant j'ai obtenu: scrollView.delegate = self; Lorsque le délégué est l'appDelegate, il fonctionne mais ce n'est pas ce que je veux.

Les fonctions suivantes j'ai utilisé dans ma classe:

  • (void) loadScrollViewWithPage: (int) Page
  • (void) scrollViewDidScroll: (UIScrollView *) expéditeur
  • (void) scrollViewDidEndDecelerating :(UIScrollView *) scrollView

Je pense avoir 2 options. Créez un objet NSObject avec une vue (est-ce possible) ou un objet qui est le délégué de l'UIScrollview.

L'erreur est ce que je gaves:

2009-11-14 17: 50: 25,723 PAR23 [1240: 20b] * - [NSCFType scrollViewDidScroll:]: sélecteur non reconnu envoyé à l'instance 0x4834190
2009- 11-14 17: 50: 25,724 PAR23 [1240: 20b] *
en raison de l'application Mettre fin exception uncaught 'NSInvalidArgumentException', raison: '*** - [NSCFType scrollViewDidScroll:]: sélecteur non reconnu envoyé à l'instance 0x4834190'

Ce n'est pas un problème de la fonction. Lorsque je supprime tout le code dans les fonctions il a encore donné cette erreur

La scrollview a obtenu les paramètres suivants:
scrollView.pagingEnabled = YES;
scrollView.contentSize = CGSizeMake (scrollView.frame.size.width * kNumberOfPages, scrollView.frame.size.height);
scrollView.showsHorizontalScrollIndicator = NON;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.scrollsToTop = NO;
scrollView.delegate = self;

Répondre

1

Définir le délégué de votre ScrollView sur le ViewController est certainement une conception acceptable. Vous devez ouvrir la console lors de l'exécution de votre application dans le simulateur pour voir quelle est l'erreur. Il va être presque impossible de diagnostiquer sans le journal des erreurs.

En outre, vous pouvez envisager de publier le code dans les fonctions de délégué de la vue déroulante.

+0

J'ai mis à jour ma question –

2

J'ai eu le même problème avec UIScrollViewDelegte. Je mettais le contrôleur de vue qui a créé mon UIScrollView pour être le délégué pour ce UIScrollView et j'obtenais également le sélecteur non reconnu envoyé au problème d'instance que vous listez ci-dessus.

Dans mon contrôleur de vue ce code se bloque.J'ai travaillé autour de cela en sous-classant UIScrollView et en faisant que le délégué. Alors maintenant, mon scrollView est son propre délégué. Voici le code modifié.

// create the scrollview 
    scrollView = [[PMStickyHeaderScrollView alloc] initWithFrame:scrollFrame]; 

    // add content view to the scrollView 
    scrollView.contentSize = contentFrame.size; 
    scrollView.scrollEnabled = YES; 
    scrollView.clipsToBounds = YES; 
    scrollView.delegate = scrollView; // notice that the scrollView is its own delegate 
    [scrollView addSubview:contentView]; 

Cette solution de contournement est suffisante pour moi. Voici ma mise en œuvre simple de ma sous-classe scrollView.

@interface PMStickyHeaderScrollView : UIScrollView <UIScrollViewDelegate> 
@end 

@implementation PMStickyHeaderScrollView 

- (void)scrollViewDidScroll:(UIScrollView *)sView 
{ 
    NSLog(@"scrollViewDidScroll %@", [sView description]); 
} 

@end 

Pour ce que ça vaut, je crois que la cause profonde du problème est une mauvaise manipulation de la chaîne de répondeur par le UIScrollView lorsque le délégué du UIScrollView est réglé, mais je n'ai pas vu de bugs signalés à ce sujet. J'utilise l'iPhone 3.0 SDK. Qu'est-ce que tout le monde utilise? D'autres solutions de contournement intelligentes pour ce problème?

+0

J'ai ajouté simplement "scrollView.delegate = scrollView;" et cela a fonctionné, merci – lomec

1

Je suis tombé sur le même problème. Accidentellement fixé quand j'ai arrêté de libérer le contrôleur de vue (qui avait le scrollView) après l'avoir ajouté à une vue. Je ne suis pas sûr pourquoi cela se produit, parce que je suis sûr que libérer le contrôleur de vue après l'avoir ajouté à une vue est la bonne chose à faire, puisque je ne fais rien d'autre avec cela.

+0

† son devrait être posté comme commentaire pas une réponse. –

Questions connexes