Question

Dans ma demande, j'utilise une table sur mesure. Chaque cellule a un UIButton et UIImage. Lorsqu'une mise en contact accurs au bouton, je veux appeler la méthode UIImagePickerController pour sélectionner une image dans la bibliothèque de l'iPhone et de l'afficher dans la vue de l'image. Je l'ai écrit mais obtenir un avertissement ... « customCell » peut ne pas répondre à presentmodalviewcontroller animée ... ici customCell est la sous-classe de ma classe principale, myApp, aussi le nom de la pointe de la cellule personnalisée. Tout le monde connaît le problème ???? Merci ...

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;
 } 
Était-ce utile?

La solution

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

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

Ajoutez une variable d'instance à votre classe de cellules personnalisées:

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

Dans -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, remplacez

[self presentModalViewController:picker animated:YES];

avec

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

Autres conseils

Ce ne sera pas répondre à votre question, mais si vous devez avoir un UIButton dans une cellule, vous allez probablement au sujet de votre mauvaise conception de l'interface utilisateur. Essayez de penser à un moyen d'avoir la cellule entière effectuer l'action, sinon de cela, utilisez un gadget de communication ou de quelque chose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top