2009-12-02 7 views
3

Dans mon application, j'utilise une table personnalisée. Chaque cellule a un uibutton et uiimage. Quand une touche apparaît sur le bouton, je veux appeler la méthode uiimagepickercontroller pour sélectionner une image de la bibliothèque de l'iphone et l'afficher dans la vue de l'image. Je l'ai écrit mais en recevant un avertissement ... 'customCell' peut ne pas répondre à presentmodalviewcontroller animé ... ici customCell est la sous-classe de ma classe principale, myApp, aussi le nom de la plume de la cellule personnalisée. Quelqu'un connaît le problème? Merci ...Problème avec uibutton dans UItableViewCell

EDIT

- (IBAction)selectExistingPicture1 { 
    if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypePhotoLibrary]) { 
     UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
     picker.delegate = self; 
     picker.allowsImageEditing = YES; 
     picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
     [self presentModalViewController:picker animated:YES]; 
     [picker release]; 
    } 
    else { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error accessing photo library" message:@"Device does not support a photo library" delegate:nil cancelButtonTitle:@"Drat!" otherButtonTitles:nil]; 
     [alert show]; 
     [alert release]; 
    } 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {  
    CGSize newSize = CGSizeMake(80, 80); 
    UIGraphicsBeginImageContext(newSize); 
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    imageView.image = newImage; 

    [picker dismissModalViewControllerAnimated:YES]; //warning shown here 
} 

Ceci est la classe de cellule personnalisé .. et la classe viewController a ...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier"; 
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier]; 

    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil]; 
     for (id currentObject in nib){ 
      if ([currentObject isKindOfClass:[CustomCell class]]){ 
       cell = (CustomCell *)currentObject; break; 
      } 
     } 
    } 

    NSUInteger s= indexPath.section; 
    //[cell setText:[NSString stringWithFormat:@"I am cell %d", indexPath.row]]; 

    NSUInteger r = indexPath.row; 
     cell.imageView.image = nil; 
    for (s;s==0;s++) 
    for(r;r==0;r++) 
    {  
      UIImage *img=imageView.image; 
     cell.imageView.image = img; 
     } 
    return cell; 
} 

Répondre

6

UITableViewCell ne répond pas à -presentModalViewController:animated:.

Vous pouvez probablement donner à votre CustomCell un pointeur vers votre contrôleur de vue, puis appeler le -presentModelViewController:animated: sur le contrôleur de vue.

Ajouter une variable d'instance à votre classe de cellules personnalisée:

@interface CustomCell : UITableViewCell { 
    UIViewController *viewController; 
} 
@property (nonatomic, assign) UIViewController *viewController; 
@end 

En -tableView:cellForRowAtIndexPath:, après avoir créé une nouvelle CustomCell, définissez la propriété:

if (cell == nil) { 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil]; 
    for (id currentObject in nib){ 
     if ([currentObject isKindOfClass:[CustomCell class]]){ 
      cell = (CustomCell *)currentObject; 
      cell.viewController = self; // <-- add this 
      break; 
     } 
    } 
} 

Ensuite, dans votre classe CustomCell, remplacer

[self presentModalViewController:picker animated:YES]; 

avec

[self.viewController presentModalViewController:picker animated:YES]; 
+0

Je l'ai fait avec l'uibutton dans la cellule .. importé des images de la bibliothèque à la vue de l'image de chaque cellule. Mais le nouveau problème est qu'ils disparaissent en faisant défiler la table ... – Nithin

+0

dois-je chane quelque chose dans le cellForRowAtIndexPath: méthode ?? – Nithin

+0

Merci patron. @Thomas – Ramdy

0

Cela ne répond pas à votre question, mais si vous devez avoir un UIButton dans une cellule, vous allez probablement à propos de votre conception de l'interface utilisateur faux. Essayez de penser à un moyen d'avoir l'ensemble de la cellule effectuer l'action, sinon, utilisez un gadget de divulgation ou quelque chose.

Questions connexes