2010-05-17 2 views
7

У меня есть контроллер вида split, в котором на левой стороне находится контроллер табличного представления. Как показать панель действий внутри popover, когда я нажимаю кнопку раскрытия подробностей ячейки таблицы?Как показать лист действий внутри popover?

ответ

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 docs утверждают, что showFromRect:inView:animated: метод:

отображает лист действий в пирог которой стрелка указывает на указанный прямоугольника зрения (в нашем случае кнопка раскрытия подробностей). Попсор не перекрывает указанный прямоугольник.

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

Испытано в прошивкой 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; 
} 
Смежные вопросы