2011-06-03 16 views
13

[menuitem setKeyEquivalent: (NSString *) s], ile bir menü öğesinin tuş eşdeğerini ayarlamak istiyorum Birden fazla değiştiricem varsa bunu nasıl yapabilirim? Kakao: Anahtar eşdeğerini ayarlama

denedim:

unichar shift = NSShiftKeyMask, cmd = NSCommandKeyMask; 
NSMutableString *keyequiv = [[NSMutableString alloc] init]; 

[keyequiv appendString:[NSString stringWithCharacter:&shift, 1]]; 
[keyequiv appendString:[NSString stringWithCharacter:&cmd, 1]]; 
[keyequiv appendString:@"x"]; 
[menuItem setKeyEquivalent:keyequivalent]; 

ama bu çalışmıyor.

cevap

24

Değiştirici anahtar maskeleri şu şekildedir: maskeler, karakterler değil. Bunları anahtar eşdeğer dizeye ekleyemezsiniz. Onları uygulamak için kombinasyonlar oluşturmak üzere bitsel OR operatörünü | kullanın başka maske olduğu gibi setKeyEquivalentModifierMask:

[menuItem setKeyEquivalentModifierMask: NSShiftKeyMask | NSCommandKeyMask]; 
[menuItem setKeyEquivalent:@"x"]; 

kullanın. Daha fazla ayrıntı için bkz. "Setting a Menu Item's Key Equivalent". Swift 2.0

+2

Not NSShiftKeyMask, NSCommandKeyMask vb olduğu önerilmemektedir. Bunun yerine NSEventModifierFlagShift, NSEventModifierFlagCommand vb. –

9

setKeyEquivalent: yöntemi, komutu tetikleyen karakteri değil, değiştiriciyi belirtmek için kullanılır. Geçtiğiniz karakteri inceleyerek varsayılan değiştiricileri ayarlayacaktır. Küçük harfli bir karakter geçirirseniz, yalnızca komutunu kullanır. Büyük harfli bir karakter iletirseniz, kaydırma + komutunu komutunu kullanır. NSShiftKeyMask seçilen, diğer değiştiriciler kullanmak istiyorsanız

[menuItem setKeyEquivalent:@"X"]; 

, daha sonra uygun sabitleri ile setKeyEquivalentModifierMask: çağrı: Bu nedenle, sadece vardiya + komut + x için yapmanız gerekir , NSAlternateKeyMask (isteğe bağlı), NSCommandKeyMask ve NSControlKeyMask.

4

Örnek: Swift 3.0

let key = String(utf16CodeUnits: [unichar(NSBackspaceCharacter)], count: 1) as String 
item.keyEquivalentModifierMask = Int(NSEventModifierFlags.CommandKeyMask.rawValue | NSEventModifierFlags.ControlKeyMask.rawValue) 
item.keyEquivalent = key 
1

Örnek:

item.keyEquivalent = "x" 
item.keyEquivalentModifierMask = [NSAlternateKeyMask, NSCommandKeyMask]