Простой способ показать 'Копию' раскрывается на UITableViewCells как Приложение адресной книги

Существует ли простой путь к подклассам UITableViewCell, чтобы показать 'Копии' всплывающее окно UIMenuController как в приложении Адресной книги (см. снимок экрана), после того, как выбор сохранен некоторое время?

address book

40
задан Anh Pham 6 July 2017 в 13:26
поделиться

2 ответа

Метод до iOS 5 заключался в получении общего экземпляра UIMenuController, установке целевого прямоугольника, просмотре и вызове -setMenuVisible: animated: . Не забудьте реализовать -canPerformAction: withSender: в вашем респонденте.


Метод после iOS 5 (ранее доступный как недокументированная функция) - реализовать эти 3 метода в вашем источнике данных (см. https://developer.apple.com/reference/uikit/uitableviewdelegate#1653389 ).

-(void)tableView:(UITableView*)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath*)indexPath withSender:(id)sender;
-(BOOL)tableView:(UITableView*)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath*)indexPath withSender:(id)sender;
-(BOOL)tableView:(UITableView*)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath*)indexPath; 
29
ответ дан 27 November 2019 в 01:10
поделиться

Ваш подкласс UITableViewCell может выглядеть так

@interface MenuTableViewCell : UITableViewCell {
}
- (IBAction)copy:(id)sender;
- (void)showMenu;

@end


@implementation MenuTableViewCell

- (BOOL)canBecomeFirstResponder {
    return YES;
}
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(copy:)) {
        return YES;
    }
    return NO;
}
- (IBAction)copy:(id)sender {
}
- (void)showMenu {
    [[UIMenuController sharedMenuController] setMenuVisible:NO animated:YES];
    [self becomeFirstResponder];
    [[UIMenuController sharedMenuController] update];
    [[UIMenuController sharedMenuController] setTargetRect:CGRectZero inView:self];
    [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES];

}

@end

А методы делегата UITableView похожи на

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    MenuTableViewCell *cell = (MenuTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[MenuTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    MenuTableViewCell *cell = (MenuTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
    [cell showMenu];
}
14
ответ дан 27 November 2019 в 01:10
поделиться