Pergunta

Na minha aplicação, eu estou usando uma tabela personalizada. Cada célula tem um UIButton e UIImage. Quando um toque para cima accurs no botão, eu quero chamar o método UIImagePickerController para selecionar uma imagem a partir da biblioteca iphone e exibi-lo no modo de exibição de imagem. Eu escrevi isso, mas recebendo um aviso ... 'customCell' pode não responder a presentModalViewController animado ... aqui customCell é a subclasse de minha classe principal, myApp, também o nome da ponta da célula personalizado. Qualquer um sabe o problema ???? Graças ...

Editar

- (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   
}  

Esta é a classe de célula personalizado .. ea classe viewController tem ...

- (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;
 } 
Foi útil?

Solução

UITableViewCell não responde a -presentModalViewController:animated:.

Você provavelmente poderia dar o seu CustomCell um ponteiro para o controlador de vista, e depois chamar -presentModelViewController:animated: no controlador de vista.

Adicionar uma variável de instância de sua classe de célula personalizado:

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

Em -tableView:cellForRowAtIndexPath:, depois de criar uma nova CustomCell, defina a propriedade:

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;
        }
    }
}

Então, em sua classe CustomCell, substitua

[self presentModalViewController:picker animated:YES];

com

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

Outras dicas

Isso não vai responder à sua pergunta, mas se você tem que ter um UIButton em uma célula, você provavelmente vai sobre o seu errado UI design. Tente pensar em uma maneira de ter toda a célula executar a ação, ou se não isso, usar um gadget divulgação ou algo assim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top