左側にテーブルビューコントローラーを保持する分割ビューコントローラーがあります。テーブル セルの詳細開示ボタンをクリックしたときに、ポップオーバー内にアクション シートを表示するにはどうすればよいですか?
9652 次
2 に答える
15
これを試して :
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];
UIActionSheetのドキュメントには、showFromRect:inView:animated:
メソッドは次のように記載されています。
ポップオーバーにアクションシートを表示します。ポップオーバーの矢印は、ビューの指定された長方形(この場合は詳細表示ボタン)を指しています。ポップオーバーは指定された長方形と重なりません。
于 2010-10-18T11:46:47.167 に答える
0
私はこれをより高度な用途に使用します:
- カスタム 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;
}
于 2012-06-19T19:50:33.857 に答える