阅读http://nshipster.com/uikeycommand/后,我想使用箭头键在我的应用中添加选项卡之间的导航。但是我没有设法在UITabBarController中接收按键。下面的相同代码块在UIViewController中工作,但UITabBarController。
当我尝试调试时,对于UITabBarController的canBecomeFirstResponder覆盖甚至不会被调用。我没有在apple的文档中找到有用的东西。感谢任何使问题清晰的信息。
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let firstResponderResult = self.becomeFirstResponder()
println("became first responder \(firstResponderResult)")
}
override func canBecomeFirstResponder() -> Bool {
return true
}
override var keyCommands: [AnyObject]? {
return [
UIKeyCommand(input: UIKeyInputRightArrow, modifierFlags: UIKeyModifierFlags.allZeros, action: "rightArrowClicked:"),
UIKeyCommand(input: UIKeyInputLeftArrow, modifierFlags: UIKeyModifierFlags.allZeros, action: "leftArrowClicked:")
]
}
func rightArrowClicked(sender: UIKeyCommand) {
let currentIndex = selectedIndex;
if (currentIndex < viewControllers!.count - 1) {
selectedIndex = currentIndex + 1;
}
}
func leftArrowClicked(sender: UIKeyCommand) {
let currentIndex = selectedIndex;
if (currentIndex > 0) {
selectedIndex = currentIndex - 1;
}
}
答案 0 :(得分:2)
我认为你应该在UITabBarController中覆盖VC的canBecomeFirstResponder
方法,而不是标签栏控制器。这样你就可以获得按键。
答案 1 :(得分:0)
Swift5中的iOS13和Mac Catalyst:
extension UITabBarController {
open override var keyCommands: [UIKeyCommand]? {
return [
UIKeyCommand(input: UIKeyCommand.inputRightArrow, modifierFlags: .alternate, action: #selector(rightArrowClicked)),
UIKeyCommand(input: UIKeyCommand.inputLeftArrow, modifierFlags: .alternate, action: #selector(leftArrowClicked))
]
}
@objc private func rightArrowClicked(sender: UIKeyCommand) {
let currentIndex = selectedIndex;
if (currentIndex < viewControllers!.count - 1) {
selectedIndex = currentIndex + 1;
}
}
@objc private func leftArrowClicked(sender: UIKeyCommand) {
let currentIndex = selectedIndex;
if (currentIndex > 0) {
selectedIndex = currentIndex - 1;
}
}
open override var canBecomeFirstResponder: Bool {
return true
}