Премахнете (или персонализирайте) „Търсене“ от помощното меню

Приложението ми има менюто „Помощ“ по подразбиране. Премахнах записа „Помощ“ и добавих запис за поддръжка, който препраща към форум на моя уебсайт.

Перото на менюто за помощ изглежда така:

Меню в перото

Но след като стартирам приложението, нов елемент от менюто беше засмукан:

Меню с търсене

Как мога да накарам търсенето да изчезне? (Или още по-добре, как мога да го накарам да стартира url с параметри като http://mywebsite.com/support?search=XXXXX).


person Kyle    schedule 27.02.2014    source източник


Отговори (7)


Търсите протокол NSUserInterfaceItemSearching. Върнете единичен резултат от търсенето и го използвайте, за да отворите персонализирания си URL адрес.

- (void)searchForItemsWithSearchString:(NSString *)searchString resultLimit:(NSInteger)resultLimit matchedItemHandler:(void (^)(NSArray *items))handleMatchedItems
{
    handleMatchedItems(@[searchString]);
}

- (NSArray *)localizedTitlesForItem:(id)item
{
    return @[[NSString stringWithFormat:@"Search for '%@' on my website", [item description]]];
}

- (void)performActionForItem:(id)item
{
    // Open your custom url assuming item is actually searchString
}
person pointum    schedule 01.03.2014
comment
За тези, които идват към разработката на Mac чрез Mac Catalyst: това не се поддържа в приложенията на Mac Catalyst. - person arlomedia; 10.03.2020

Намерих начин да премахна лентата за търсене (но не и да я персонализирам).

Просто задайте меню, което не се използва, към помощното меню:

NSMenu *unusedMenu;
unusedMenu = [[NSMenu alloc] initWithTitle:@"Unused"];

NSApplication *theApp;
theApp = [NSApplication sharedApplication];
theApp.helpMenu = unusedMenu;

Документацията споменава това в свойството helpMenu на класа NSApplication.

person zhoudu    schedule 12.01.2017

Вероятно не искате да се отървете от тази лента за търсене, тъй като все още можете да я използвате за търсене на елементи от менюто!

Търсене на елементи от менюто

Както съм сигурен, че знаете, това поле за търсене ще показва теми за помощ само ако вашето приложение се доставя с книга за помощ на Apple, която може да бъде направена, като следвате Документация на Apple.

Опасявам се, че не знам за начин да отменя поведението на лентата за търсене, но ако не искате да пишете документация за вашето приложение, мисля, че би било по-добре да запазите лентата за търсене, дори и да можете не търсете във вашия форум за помощ.

person Ben    schedule 27.02.2014
comment
Споменава се само накратко в NSApplication като помощ за прожектори или нещо подобно. - person uchuugaka; 28.02.2014
comment
Текущата фраза в документите е Прожектор за помощ. - person leanne; 28.07.2020

Премахвам лентата за търсене от менюто „Помощ“ в разработката на mac, като въвеждам един интервал след „Помощ“, като „помощ“. Изглежда смешно, но работи правилно.

въведете описание на изображението тук

person user7345678    schedule 10.04.2019
comment
Приложението ми е написано на Java. Така че този трик е единственото решение, което мога да приложа. И работи. - person dpolivaev; 07.06.2020

Отговорът на @zhoudu работи за мен. Преведох го на Swift 5.0:

let unusedMenu = NSMenu(title: "Unused")
NSApplication.shared.helpMenu = unusedMenu

Поставете го във вашия AppDelegate.

person Houman    schedule 26.02.2020

Отговорите от @pointum и @zhoudu не се поддържат в приложенията на Mac Catalyst, така че ето опция за това.

Според този отговор, полето за търсене се добавя от macOS. Потърсих plist key, за да го деактивирате, но не намерих нищо. Тогава започнах да се забърквам с метода 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

Вдъхновен от отговора на @arlomedia и използвайки Swift 5.x, Xcode 11.x, създадох разширение към appDelegate който работи в Mac Catalyst и прави и двете неща, които OP искаше:

  1. Създайте персонализирано помощно меню без елемента Търсене и с елемента Поддръжка.
  2. Насочете персонализирания елемент от менюто Поддръжка към уеб страница.
import UIKit

extension AppDelegate {
    
    /// selector function to open the desired web page
    @objc func openSupportPage() {
        if let url = URL(string: "https://mywebsite.com/support?search=XXXXX") {
            UIApplication.shared.open(url)
        }
    }
    
    /// buildMenu override to customize the default menu
    override func buildMenu(with builder: UIMenuBuilder) {
        
        // ensure we're working with the main menu; and, if so, run `super`!
        guard builder.system == .main else { return }
        super.buildMenu(with: builder)
        
        // remove the "stock" help menu
        builder.remove(menu: .help)
        
        // create the Support help item; gave it a shortcut key of "s" (Command-S)
        let supportHelpItem = UIKeyCommand(
            title: "Support",
            action: #selector(openSupportPage),
            input: "s",
            modifierFlags: [.command])
        
        // create a custom menu to appear as *Help* menu on menu bar
        let myHelpMenu = UIMenu(
            title: "Help ",                 // note the space after "Help"
            children: [supportHelpItem])    // add the *Support* item to the menu
        
        // insert the *Help* menu at the end of the existing menu bar items
        // (after the Window item) where the Help menu would've appeared
        builder.insertSibling(myHelpMenu, afterMenu: .window)
    }
}
person leanne    schedule 28.07.2020