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?
7
A
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:
- individuelle accesoryView findet (cell.accesoryView)
- wenn leer, finden accesoryView (UIButton) generiert, wenn Zelle
- wenn hat die UIButton existiert nicht, Zellenkontextansicht finden (UITableViewCellContentView)
- 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;
}