Я использую это для более расширенного использования:
- находит пользовательский accesoryView (cell.accesoryView)
- если пусто, найти сгенерированный accesoryView (UIButton), если ячейка имеет
- если UIButton не существует, найти представление контекста ячейки (UITableViewCellContentView)
- если представление контекста ячейки не существует, используйте представление ячейки
Может использоваться для UIActionSheet или UIPopoverController .
Вот мой код:
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];
Протестировано в iOS 4.3 до 5.1
Лучше всего использовать в качестве пользовательского метода:
-(UIView*)getViewForSheetAndPopUp:(UITableViewCell*)cell;
И код метода:
-(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;
}