Ответы от @pointum и @zhoudu не поддерживаются в приложениях Mac Catalyst, так что вот вариант для этого.
Согласно этому ответу, поле поиска добавляется macOS. Я искал ключ plist, чтобы отключить его, но ничего не нашел. Затем я начал возиться с методом buildMenuWithBuilder
. Мне пришлось изменить свой класс AppDelegate
, чтобы он был подклассом UIResponder
вместо NSObject
, и тогда я мог переопределить этот метод в своем AppDelegate
. После того, как это запустилось, потребовалось несколько попыток сделать с ним что-то полезное.
Попытка 1: я попытался удалить первый элемент меню "Справка", который был полем поиска.
- (void)buildMenuWithBuilder:(id<UIMenuBuilder>)builder {
[super buildMenuWithBuilder:builder];
[builder replaceChildrenOfMenuForIdentifier:UIMenuHelp fromChildrenBlock:^(NSArray<UIMenuElement *> *currentChildren) {
NSMutableArray *newChildren = [NSMutableArray arrayWithArray:currentChildren];
[newChildren removeObjectAtIndex:0 withSafeChecks:TRUE];
return newChildren;
}];
}
Но поле поиска добавляется после запуска этого метода, поэтому этот код удалил только элемент «[имя приложения] Справка», который я хотел сохранить.
Попытка 2: я попытался взять элемент меню "[имя приложения] Справка" из меню по умолчанию, затем добавить его в новое меню и заменить меню справки по умолчанию следующим:
- (void)buildMenuWithBuilder:(id<UIMenuBuilder>)builder {
[super buildMenuWithBuilder:builder];
UIMenuElement *helpItem = [[builder menuForIdentifier:UIMenuHelp].children objectAtIndex:0];
UIMenu *helpMenu = [UIMenu menuWithTitle:@"Help " children:[NSArray arrayWithObject:helpItem]];
[builder replaceMenuForIdentifier:UIMenuHelp withMenu:helpMenu];
}
Но macOS не так легко обмануть; он по-прежнему идентифицировал это как меню справки и добавил поле поиска. Даже когда я изменил название меню на «Справка», как показано здесь, я получил тот же результат.
Попытка 3: Наконец, мне пришлось создать новое действие справки, добавить его в новое меню справки и назвать это меню с помощью дополнительного пробела. Только когда я сделал все три вещи, macOS перестала добавлять поле поиска:
- (void)buildMenuWithBuilder:(id<UIMenuBuilder>)builder {
[super buildMenuWithBuilder:builder];
UIAction *helpAction = [UIAction actionWithTitle:@"[app name] Help" image:nil identifier:@"simpleHelp" handler:^(__kindof UIAction *action) {
// my help code
}];
UIMenu *helpMenu = [UIMenu menuWithTitle:@"Help " children:[NSArray arrayWithObject:helpAction]];
[builder replaceMenuForIdentifier:UIMenuHelp withMenu:helpMenu];
}
person
arlomedia
schedule
10.03.2020