Реализация iPhone скопировать/вставить управляет на пользовательском представлении / uiview подкласс

Я признаю, что уже существует вопрос точно вдоль этих строк здесь на S.O., но это испытывает недостаток в деталях реализации, рабочем ответе, и я хотел бы быть более конкретным, таким образом, я думаю, что новый вопрос в порядке. Очевидно, сообщите мне, неправ ли я, и мы можем попытаться перезапустить поток там.

В основном я хочу скопировать текст в UILabel к области монтажа, когда пользователь удерживает на маркировке. Не трудно, чтобы сделать, честно. Однако я думаю, что лучший способ обеспечить визуальную обратную связь состоит в том, чтобы предложить пользователю с пунктом меню Copy от UIMenuController.

Согласно разделу Event Handling Руководства по программированию приложения для iPhone, конкретно раздел по Копии, Сокращению и Операциям вставки, это должно быть возможно предоставить копию, сократить, и/или операции вставки от пользовательского представления.

Так, я разделил UILabel на подклассы со следующей реализацией, как описано руководством, но UIMenuController не обнаружится. Нет никакого признака в руководстве, что существует что-либо еще требуемое, чтобы сделать это, и оператор NSLog действительно распечатывает к консоли, указывая, что селектор выполняется, когда я удерживаю на маркировке:

//
//  CopyLabel.m
//  HoldEm
//
//  Created by Billy Gray on 1/20/10.
//  Copyright 2010 Zetetic LLC. All rights reserved.
//

#import "CopyLabel.h"

@implementation CopyLabel

- (void)showCopyMenu {
    NSLog(@"I'm tryin' Ringo, I'm tryin' reeeeal hard.");
    // bring up editing menu.
    UIMenuController *theMenu = [UIMenuController sharedMenuController];
    // do i even need to show a selection? There's really no point for my implementation...
    // doing it any way to see if it helps the "not showing up" problem...
    CGRect selectionRect = [self frame];
    [theMenu setTargetRect:selectionRect inView:self];
    [theMenu setMenuVisible:YES animated:YES]; // <-- doesn't show up...
}

// obviously, important to provide this, but whether it's here or not doesn't seem
// to change the fact that the UIMenuController view is not showing up
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    BOOL answer = NO;

    if (action == @selector(copy:))
        answer = YES;

    return answer;
}

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self performSelector:@selector(showCopyMenu) withObject:nil afterDelay:0.8f];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showCopyMenu) object:nil];
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showCopyMenu) object:nil];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showCopyMenu) object:nil];
}

@end

Так, что еще нужно сделать, чтобы заставить это произойти?

Для тех, которые после вперед и пытающийся сделать это также, необходимо будет также установить 'Взаимодействие с пользователем, Включенное' для маркировки

Править:

Для ясности позвольте мне добавить, что это должно быть подобно небольшому пункту меню [Copy], который появляется по изображению в определенных представлениях iPhone, когда Вы удерживаете на нем.-B

7
задан Community 23 May 2017 в 12:09
поделиться

1 ответ

Я скажу заранее у меня нет асвера, но я сделал немного покинул и узнал больше. Я уверен, что вы уже посмотрели на это: Copypastetile

Этот код работает на моем симуляторе и идет так:

CGRect drawRect = [self rectFromOrigin:currentSelection inset:TILE_INSET];
[self setNeedsDisplayInRect:drawRect];

UIMenuController *theMenu = [UIMenuController sharedMenuController];
[theMenu setTargetRect:drawRect inView:self];
[theMenu setMenuVisible:YES animated:YES];

Здесь есть несколько различий:

  • . Необходимо вычислить. Просмотр вычислений Point Point Tap и Tap
  • SetneedsdisplayInRect называется
  • Self - это представление большого размера экрана, вам может потребоваться координаты экрана вместо локальных координаров (вы можете получить это от Self.superview)

Я бы попытался сделать эти настройки, чтобы сначала соответствовать примеру и посмотреть, какой прогресс это заставляет меня.

7
ответ дан 7 December 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: