2010-09-30 7 views
5

Я говорю о меню, которое отображается, когда вы выбираете блок текста, который дает вам возможность вырезать/вставить/скопировать. Я понял, как добавить еще один вариант в меню, но если я добавлю два или более варианта, он сначала скажет «больше». щелкнув по нему, будут показаны все варианты, которые я добавил. Но есть ли способ показать все варианты, которые я добавил заранее? без пункта меню «больше»?Контекстное меню iPhone/iPad

ответ

7

Вам необходимо использовать UIMenuController. Если вы не хотите, Копировать/Вставить/Вырезать, вы будете включать в себя что-то подобное в вашем canPerformAction: метод:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { 
    if(action == @selector(someSelector:)) 
     return YES; 
    else 
     return NO; 
} 

Создание нового пункта меню выглядит следующим образом:

UIMenuItem *someAction = [[UIMenuItem alloc]initWithTitle:@"Something" action:@selector(doSomething:)]; 

UIMenuController *menu = [UIMenuController sharedMenuController]; 
menu.menuItems = [NSArray arrayWithObject:someAction]; 
[menu update]; 
+1

Это не то, что я не хочу этого. Мне нужно добавить еще два пункта меню. – Melina

+0

Затем вы по-прежнему используете что-то вроде я опубликовал, а затем делаете @selector (copy :), меняем его на что-то вроде @selector (copyText :), а затем реализуем свой собственный метод (void) copyText, который выполняет копирование. Тогда ваши другие предметы не попадут в большее меню. – christo16

+0

Могу ли я изменить текст элемента меню? – Melina

1

Я предполагаю, что ваш говоря о UIMenuController. Если вы не хотите видеть Copy/Paste/Cut/Delete/Select/SelectAll вам необходимо добавить следующий код на UITextField 'с или UITextView' s делегата:

- (BOOL)canPerformAction: (SEL)action withSender: (id)sender { 
    BOOL answer = NO; 
    if (action == @selector(item1)) { 
     answer = YES; 
    } 
    if (action == @selector(item2)) { 
     answer = YES; 
    } 
    return answer; 
} 

Где item1 и item2 являются имена объектов в UIMenuController.menuItems.

В моем опыте, если вы используете UITextView, пункты меню «Копировать, вставить, вырезать и выбрать все» останутся, в этом случае добавьте следующий код в подкласс UITextView.

- (BOOL) canPerformAction:(SEL)action withSender:(id)sender { 
    if (action == @selector(cut:) || action == @selector(copy:) || action == @selector(paste:) || action == @selector(selectAll:)) { 
      return YES; 
    } 
} 
+0

Я не хочу отключать эти параметры, мне нужно добавить еще два пользовательских параметра. – Melina

Смежные вопросы