2 votes

UIButton ne fonctionne pas dans UItableViewCell

J'ai une vue composée d'une étiquette et de deux boutons, que j'ai nommés UIView *footerView Je suis en train de mettre en œuvre ce système dans la dernière section de ma vue de table. J'ai fait en sorte que cette vue devienne la vue pour indexPath.section = 3 en utilisant [cell.contentView addSubview: footerView]

C'est mon problème :

Je peux voir la vue à l'intérieur de la cellule. Mais je ne peux pas appuyer sur les boutons, car la cellule est sélectionnée au lieu des boutons (qui sont à l'intérieur des cellules).

Comment puis-je surmonter ce problème ? Mes boutons ne sont même pas sélectionnables !

Voici le code... Dans cellForRowAtIndexPath:

if (section == 3){

    cell = nil;
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    if (indexPath.row ==0){

        cell.contentMode = UIViewContentModeScaleToFill;
        [cell.contentView addSubview:self.footerView];

    }

}

Et la vue du pied de page (au cas où quelqu'un aurait besoin de la voir) :

 UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 3, 300, 44)];
textView.text = @"Terms and Conditions: Lorem ipsum dolor sit amet, con- sectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut";

textView.backgroundColor = [UIColor clearColor];
textView.font = [UIFont systemFontOfSize:10];

[self.footerView addSubview:textView];

//create the button
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[button setFrame:CGRectMake(0, 60, 300, 44)];

//set title, font size and font color
[button setTitle:@"Create Account" forState:UIControlStateNormal];
[button.titleLabel setFont:[UIFont boldSystemFontOfSize:18]];
// [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

//set action of the button
[button addTarget:self action:@selector(createAccount:)
 forControlEvents:UIControlEventTouchUpInside];

[button setEnabled:YES];
//add the button to the view
[self.footerView addSubview:button];

UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[cancelButton setFrame:CGRectMake(0, 107, 300, 44)];

//set title, font size and font color
[cancelButton setTitle:@"Cancel" forState:UIControlStateNormal];
[cancelButton.titleLabel setFont:[UIFont boldSystemFontOfSize:18]];
// [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

//set action of the button
[cancelButton addTarget:self action:@selector(cancelPressed:)
       forControlEvents:UIControlEventTouchUpInside];

[cancelButton setEnabled:YES];
//add the button to the view
[self.footerView addSubview:cancelButton];

6voto

Paul.s Points 23073

Vous devrez mettre en œuvre quelque chose de similaire à ceci

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (3 == indexPath.section){
      return nil;
    }
    return indexPath;
}

Ok, si j'applique ce qui précède, cela fonctionne bien. Je pense que je peux reproduire votre problème en faisant l'opération suivante UIButton tombent en dehors du cadre de la cellule contentView . Assurez-vous que la cellule est suffisamment grande pour contenir votre étiquette et elle devrait fonctionner correctement. Pour que la cellule soit plus grande afin de s'adapter à votre contenu, vous devrez peut-être mettre en œuvre :

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  return aHeightThatIsBigEnoughToContainMySubViews;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X