2010-05-17 14 views

Respuesta

15

Prueba esto:

UIActionSheet *popupSheet = [[UIActionSheet alloc] initWithTitle:@"Title" 
                 delegate:self 
               cancelButtonTitle:@"Cancel" 
              destructiveButtonTitle:@"No Way !" 
               otherButtonTitles:nil]; 

popupSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; 
UIButton * disclosureButton = (UIButton *)cell.accessoryView; 

[popupSheet showFromRect:disclosureButton.bounds inView:cell.accessoryView animated:YES]; 
[popupSheet release]; 

El estado UIActionSheet docs que el showFromRect:inView:animated: método:

muestra la hoja de acción en un popover cuyos puntos de flecha para el rectángulo especificado de la vista (en nuestro caso el botón de divulgación de detalles). El popover no se superpone al rectángulo especificado.

0

lo uso para más uso avanzado:

  1. encuentra accesoryView personalizado (cell.accesoryView)
  2. si está vacío, encontrar generada accesoryView (UIButton) si la celda tiene
  3. si el UIButton no existe, encuentre la vista de conteo de celda (UITableViewCellContentView)
  4. si la vista de conteo de celda no existe, use la vista de celda

se puede utilizar para UIActionSheet o UIPopoverController.

Aquí está mi código:

UIView *accessoryView  = cell.accessoryView; // finds custom accesoryView (cell.accesoryView) 
if (accessoryView == nil) { 
    UIView *cellContentView = nil; 

    for (UIView *accView in [cell subviews]) { 
     if ([accView isKindOfClass:[UIButton class]]) { 
      accessoryView = accView; // find generated accesoryView (UIButton) 
      break; 
     } else if ([accView isKindOfClass:NSClassFromString(@"UITableViewCellContentView")]) { 
      // find generated UITableViewCellContentView     
      cellContentView = accView; 
     } 
    } 
    // if the UIButton doesn't exists, find cell contet view (UITableViewCellContentView)   
    if (accessoryView == nil) { 
     accessoryView = cellContentView; 
    } 
    // if the cell contet view doesn't exists, use cell view 
    if (accessoryView == nil) { 
     accessoryView = cell; 
    } 
} 

[actionSheet showFromRect:**accessoryView.bounds** inView:**accessoryView** animated:YES]; 

Probado en iOS 4.3 a 5,1

mejor para su uso como método personalizado:

-(UIView*)getViewForSheetAndPopUp:(UITableViewCell*)cell; 

Y código de método:

-(UIView*)getViewForSheetAndPopUp:(UITableViewCell*)cell { 
UIView *accessoryView = cell.accessoryView; 

if (accessoryView == nil) { 
    UIView *cellContentView = nil; 

    for (UIView *accView in [cell subviews]) { 
     if ([accView isKindOfClass:[UIButton class]]) { 
      accessoryView = accView; 
      break; 
     } else if ([accView isKindOfClass:NSClassFromString(@"UITableViewCellContentView")]) {    
      cellContentView = accView; 
     } 
    }  

    if (accessoryView == nil) { 
     accessoryView = cellContentView; 
    } 
    if (accessoryView == nil) { 
     accessoryView = cell; 
    } 
} 

return accessoryView; 
} 
Cuestiones relacionadas