7

左側にテーブルビューコントローラーを保持する分割ビューコントローラーがあります。テーブル セルの詳細開示ボタンをクリックしたときに、ポップオーバー内にアクション シートを表示するにはどうすればよいですか?

4

2 に答える 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

私はこれをより高度な用途に使用します:

  1. カスタム accesoryView (cell.accesoryView) を検索します
  2. 空の場合、セルにある場合、生成された accesoryView (UIButton) を見つけます
  3. UIButton が存在しない場合は、セル コンテンツ ビュー (UITableViewCellContentView) を見つけます。
  4. セル コンテンツ ビューが存在しない場合は、セル ビューを使用します。

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 に答える