Problema com UIButton em UITableViewCell
-
11-09-2019 - |
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;
}
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.