Как добраться, UIMenuController работают на пользовательское представление?

Это о том, сколько безопасности типов Вы хотите наложить.

, Когда Вы пишете (bar) foo (который эквивалентен reinterpret_cast<bar> foo, если Вы не обеспечили оператор преобразования типов) Вы говорите компилятору игнорировать безопасность типов, и просто делать, как это сказано.

, Когда Вы пишете static_cast<bar> foo, Вы просите, чтобы компилятор, по крайней мере, проверил, что преобразование типов имеет смысл и, для целочисленных типов, вставлять некоторый код преобразования.

<час>

РЕДАКТИРОВАНИЕ 26.02.2014

я записал этот ответ больше чем 5 лет назад, и я понял его превратно. (См. комментарии.), Но это все еще получает upvotes!

19
задан Srikar Appalaraju 23 June 2011 в 16:25
поделиться

5 ответов

// MyView.h

@interface MyView : UIView {
    IBOutlet UITextField * textField_;
}

@end

// MyView.m

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"show menu");

    [textField_ becomeFirstResponder];
    // [self.window becomeFirstResponder];

    UIMenuController * menu = [UIMenuController sharedMenuController];
    [menu setTargetRect: CGRectMake(0, 0, 100, 10) inView: self];
    [menu setMenuVisible: YES animated: YES];

    NSLog(@"menu width %f, visible %d", menu.menuFrame.size.width, menu.menuVisible);
}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
    return YES;
}

Вам нужно добавить больше кода в canPerformAction: withSender: - он должен проверить монтажный стол и состояние вашего выбора. Руководство Apple по программированию приложений для iPhone содержит несколько фрагментов кода.

1
ответ дан 30 November 2019 в 02:02
поделиться

Разве вам не нужно добавлять меню UIMenuController * в главное или дополнительное представление, например self.view ? Я думаю, это что-то вроде [self.view addSubView: menu.view]; Или мне не хватает сути вашего вопроса. Вы также можете установить рамку просмотра меню.

0
ответ дан 30 November 2019 в 02:02
поделиться

UIMenuController не имеет представления. Я только что поискал код из руководства по программированию приложений iPhone Apple: Обработка событий :

Листинг 3-4 Отображение меню редактирования

 - (void) touchesEnded: (NSSet *) касается withEvent: (UIEvent *)событие {
 UITouch * theTouch = [касается любого объекта];

 if ([theTouch tapCount] == ​​2 && [self статьFirstResponder]) {

 // код управления выбором идет сюда ...

 // вызываем меню редактирования.
 UIMenuController * theMenu = [UIMenuController sharedMenuController];
 CGRect selectionRect = CGRectMake (currentSelection.x, currentSelection.y, SIDE, SIDE);
 [theMenu setTargetRect: selectionRect inView: self];
 [theMenu setMenuVisible: ДА, анимация: ДА];
 }
}
0
ответ дан 30 November 2019 в 02:02
поделиться

Если вы реализуете настраиваемое представление, и это представление должно быть ответчиком (в отличие от некоторых другое представление, например UITextField), вам нужно переопределить функцию canBecomeFirstResponder в вашем представлении и вернуть YES:

- (BOOL)canBecomeFirstResponder {
    return YES;
}

тогда, когда вы открываете меню, вы должны сделать что-то вроде следующего:

- (void)myMenuFunc {
    if (![self becomeFirstResponder]) {
        NSLog(@"couldn't become first responder");
        return;
    }

    UIMenuController *theMenu = [UIMenuController sharedMenuController];
    CGRect selectionRect = CGRectMake(0, 0, 0, 0);
    [theMenu setTargetRect:selectionRect inView:self];
    [theMenu setMenuVisible:YES animated:YES];
}
7
ответ дан 30 November 2019 в 02:02
поделиться

для отображения UIMenuController необходимо добавить следующее

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(cut:))
        return NO;
    else if (action == @selector(copy:))
        return YES;
    else if (action == @selector(paste:))
        return NO;
    else if (action == @selector(select:) || action == @selector(selectAll:))
        return NO;
    else
        return [super canPerformAction:action withSender:sender];
}
4
ответ дан 30 November 2019 в 02:02
поделиться
Другие вопросы по тегам:

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