2010-03-01 8 views
3

Pour une raison quelconque, le bouton initialisé dans la méthode addBook de mon viewController ne répondra pas aux touches. Le sélecteur que je lui ai assigné ne se déclenche jamais, et l'image UIControlStateHighlighted n'apparaît jamais lorsque vous appuyez sur l'image.iPhone: ajouter un bouton pour faire défiler la vue rend le bouton inaccessible à l'interaction

Y at-il quelque chose d'interception touche avant de se rendre à la UIButton, ou est son interactivité en quelque sorte désactivé par ce que je fais à elle?

- (void)viewDidLoad { 

    ... 

    _scrollView.contentSize = CGSizeMake(currentPageSize.width, currentPageSize.height); 
    _scrollView.showsHorizontalScrollIndicator = NO; 
    _scrollView.showsVerticalScrollIndicator = NO; 
    _scrollView.scrollsToTop = NO; 
    _scrollView.pagingEnabled = YES; 

    ... 
} 

- (void)addBook { 
    // Make a view to anchor the UIButton 
    CGRect frame = CGRectMake(0, 0, currentPageSize.width, currentPageSize.height); 
    UIImageView* bookView = [[UIImageView alloc] initWithFrame:frame]; 

    // Make the button 
    frame = CGRectMake(100, 50, 184, 157); 
    UIButton* button = [[UIButton alloc] initWithFrame:frame]; 
    UIImage* bookImage = [UIImage imageNamed:kBookImage0]; 

    // THIS SECTION NOT WORKING! 
    [button setBackgroundImage:bookImage forState:UIControlStateNormal]; 
    UIImage* bookHighlight = [UIImage imageNamed:kBookImage1]; 
    [button setBackgroundImage:bookHighlight forState:UIControlStateHighlighted]; 
    [button addTarget:self action:@selector(removeBook) forControlEvents:UIControlEventTouchUpInside]; 

    [bookView addSubview:button]; 
    [button release]; 
    [bookView autorelease]; 

    // Add the new view/button combo to the scrollview. 
    // THIS WORKS VISUALLY, BUT THE BUTTON IS UNRESPONSIVE :(
    [_scrollView addSubview:bookView]; 
} 

- (void)removeBook { 
    NSLog(@"in removeBook"); 
} 

La hiérarchie de vue ressemble à ceci dans Interface Builder:

UIWindow 
UINavigationController 
    RootViewController 
     UIView 
      UIScrollView 
      UIPageControl 

et probablement comme celui-ci une fois la méthode addBook fonctionne:

UIWindow 
UINavigationController 
    RootViewController 
     UIView 
      UIScrollView 
       UIView 
        UIButton 
      UIPageControl 

Répondre

7

THe UIScrollView pourrait prendras toute la touche événements.

Peut-être essayer une combinaison des éléments suivants:

_scrollView.delaysContentTouches = NO; 
_scrollView.canCancelContentTouches = NO; 

et

bookView.userInteractionEnabled = YES; 
+0

Merci, Monsieur Marge. Cette dernière suggestion a fonctionné. – clozach

+0

userInteractionEnabled était NON pour la vue à laquelle j'ajoutais UIButton en tant que sous-vue. C'était la cause, pas les 2 autres paramètres. – Alyoshak

4

essayer d'enlever le [LivreVoir autorelease]; et le faire comme ceci:

// Add the new view/button combo to the scrollview. 
// THIS WORKS VISUALLY, BUT THE BUTTON IS UNRESPONSIVE :(
[_scrollView addSubview:bookView]; 
[bookView release]; 

_scrollView.canCancelContentTouches = YES; devrait faire l'affaire

delaysContentTouches - est une valeur booléenne qui détermine si la vue de défilement retarde la manipulation des gestes tactiles vers le bas. Si la valeur de cette propriété est OUI, la vue déroulante retarde la manipulation du geste de toucher jusqu'à ce qu'elle puisse déterminer si le défilement est l'intention. Si la valeur est NO, la vue déroulante appelle immédiatement touchesShouldBegin: withEvent: inContentView :. La valeur par défaut est YES.

canCancelContentTouches - est une valeur booléenne qui contrôle si les touches de la vue de contenu mènent toujours au suivi. Si la valeur de cette propriété est OUI et qu'une vue dans le contenu a commencé à suivre un doigt qui la touche, et si l'utilisateur fait glisser le doigt suffisamment pour lancer un défilement, la vue reçoit un message touchesCancelled: withEvent: et la vue déroulante gère le toucher comme un rouleau. Si la valeur de cette propriété est NON, la vue de défilement ne défile pas indépendamment du mouvement du doigt une fois que la vue de contenu commence à suivre.

+0

Oups. Oui, je n'utilisais pas autorelease correctement ... gaspillage. Merci, SorinA. – clozach

Questions connexes