我正在尝试让我的键盘 View 打开方向更改 - 我在 .xib 中的 View 与 @IBOutlet 连接,然后我在 viewDidLoad() 中使用 loadInterface() 调用它们我希望我的调用viewDidLoad 会更新界面,但我认为它并没有像我想象的那样工作——它没有破坏任何东西,但它也不起作用(尽管,我从上周开始取得了很多进步。)。
我有一种感觉,这与方向改变有关......
import UIKit
class KeyboardViewController: UIInputViewController {
@IBOutlet var keyboardViewPortrait: UIView!
@IBOutlet var keyboardViewLandscape: UIView!
func loadInterface(){
var keyboardNib = UINib(nibName: "keyboardView", bundle: nil)
UIDevice.currentDevice().beginGeneratingDeviceOrientationNotifications()
if self.interfaceOrientation.isLandscape {
self.keyboardViewLandscape = keyboardNib.instantiateWithOwner(self, options: nil)[0] as UIView
view.addSubview(self.keyboardViewLandscape)
view.backgroundColor = self.keyboardViewLandscape.backgroundColor
}
else if self.interfaceOrientation.isPortrait {
self.keyboardViewPortrait = keyboardNib.instantiateWithOwner(self, options: nil)[0] as UIView
view.addSubview(self.keyboardViewPortrait)
view.backgroundColor = self.keyboardViewPortrait.backgroundColor
}
self.nextKeyboardButton.addTarget(self, action: "advanceToNextInputMode", forControlEvents: .TouchUpInside)
}
override func viewDidLoad() {
super.viewDidLoad()
UIDevice.currentDevice().beginGeneratingDeviceOrientationNotifications()
loadInterface()
...
}
}
*更新
我认为 rdelmar 让我走上了正确的道路,但仍然缺少一些东西。
谢谢!
最佳答案
问题是您将相同的 View 分配给 self.keyboardViewLandscape 和 self.keyboardViewPortrait(在这两种情况下,这是您从 keyboardNib.instantiateWithOwner(self, options: nil)[0] 获得的 View )。其中一个属性应分配给索引为 1 的对象。此外,最好使用处理旋转的新方法 viewWillTransitionToSize:withTransitionCoordinator:。添加新 View 时,您还需要删除以前的 View 。
class ViewController: UIViewController {
var keyboardViewPortrait: UIView!
var keyboardViewLandscape: UIView!
var keyboardNib = UINib(nibName: "keyboardView", bundle: nil)
override func viewDidLoad() {
super.viewDidLoad()
self.keyboardViewPortrait = keyboardNib.instantiateWithOwner(self, options: nil)[0] as UIView
view.addSubview(self.keyboardViewPortrait)
view.backgroundColor = self.keyboardViewPortrait.backgroundColor
}
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator){
if size.width > size.height {
self.keyboardViewPortrait.removeFromSuperview()
self.keyboardViewLandscape = keyboardNib.instantiateWithOwner(self, options: nil)[1] as UIView
view.addSubview(self.keyboardViewLandscape)
view.backgroundColor = self.keyboardViewLandscape.backgroundColor
}
else {
self.keyboardViewLandscape.removeFromSuperview()
self.keyboardViewPortrait = keyboardNib.instantiateWithOwner(self, options: nil)[0] as UIView
view.addSubview(self.keyboardViewPortrait)
view.backgroundColor = self.keyboardViewPortrait.backgroundColor
}
}
}
关于ios - 在 swift 中加载关于方向变化的 xib View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28310701/