2010-05-17 12 views

Odpowiedz

15

Spróbuj tego:

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

Stan UIActionSheet docs że showFromRect:inView:animated: metoda:

wyświetla arkusz działania w popover którego strzałka skierowana do określonego prostokąta widoku (w naszym przypadku przycisk ujawniania szczegółów). Popover nie nakłada się na określony prostokąt.

0

Używam tego więcej zaawansowanego użycia:

  1. znajdzie niestandardową accesoryView (cell.accesoryView)
  2. , gdy są opróżnione znaleźć generowane accesoryView (UIButton) jeżeli komórka ma
  3. jeśli UIButton nie istnieje, znajdź widok zawartości komórki (UITableViewCellContentView)
  4. , jeśli widok contet komórki nie istnieje, użyj widoku komórki

może być użyty do UIActionSheet lub UIPopoverController.

Oto mój kod:

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

Testowany w iOS 4.3 do 5.1

najlepiej używać jako metody niestandardowe:

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

i kod metoda:

-(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; 
} 
Powiązane problemy