2010-05-17 7 views
7

Ich habe einen Split-View-Controller, in dem die linke Seite einen Table-View-Controller enthält. Wie zeige ich ein Action-Sheet im Popover, wenn ich auf den Detail-Button in der Tabellenzelle klicke?Wie zeige ich ein Action Sheet im Popover?

Antwort

15

Versuchen Sie folgendes:

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

Der UIActionSheet docs Zustand, dass die showFromRect:inView:animated: Methode:

zeigt die Aktion Blatt in einer popover deren Pfeil auf das angegebene Rechteck der Ansicht (in unserem Fall die Detailveröffentlichungstaste). Das Popover überlappt das angegebene Rechteck nicht.

0

Ich benutze dies für mehr erweiterte Nutzung:

  1. individuelle accesoryView findet (cell.accesoryView)
  2. wenn leer, finden accesoryView (UIButton) generiert, wenn Zelle
  3. wenn hat die UIButton existiert nicht, Zellenkontextansicht finden (UITableViewCellContentView)
  4. Wenn die Zellenkontextansicht nicht existiert, verwenden Sie die Zellenansicht

kann Gebrauch für UIActionSheet oder UIPopoverController sein.

Hier ist mein Code:

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

in iOS 4,3-5,1 Getestet

Am besten als benutzerdefinierte Methode zu verwenden:

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

und Methodencode:

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