【问题标题】:How to show an action sheet inside the popover?如何在弹出框内显示操作表?
【发布时间】:2010-05-17 09:37:28
【问题描述】:

我有一个拆分视图控制器,其中左侧包含一个表格视图控制器。单击表格单元格的详细信息披露按钮时,如何在弹出框内显示操作表?

【问题讨论】:

    标签: ipad controller action popover


    【解决方案1】:

    试试这个:

    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 docs 声明 showFromRect:inView:animated: 方法:

    在弹出框中显示操作表,其箭头指向视图的指定矩形(在我们的示例中为详细信息显示按钮)。弹出框不与指定的矩形重叠。

    【讨论】:

      【解决方案2】:

      我将它用于更多高级用途:

      1. 找到自定义的 accesoryView (cell.accesoryView)
      2. 如果为空,则查找生成的accesoryView(UIButton)如果单元格有
      3. 如果 UIButton 不存在,则查找单元格内容视图 (UITableViewCellContentView)
      4. 如果单元格内容视图不存在,请使用单元格视图

      可用于 UIActionSheetUIPopoverController

      这是我的代码:

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

      【讨论】:

        猜你喜欢
        • 2019-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多