ios - 在 swift 中加载关于方向变化的 xib View

标签 ios swift

我正在尝试让我的键盘 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/

相关文章:

ios - 适用于iOS的Facebook SDK权限问题

ios - 无法将类型 'NSURL.Type' 的值转换为预期的参数类型 'NSURL?'

ios - 如何使用自动布局调整图像按钮的大小?

ios - 在 block 中调用时未发出 CLLocationManager 身份验证请求

ios - React Native iOS Native View 使用适当的 reactTag 发送事件

ios - 在自定义 UITabBarController 中抑制 moreNavigationController

ios - 为什么我无法将 UIImageView 作为参数传递?

ios - 导航栏在隐藏时没有动画,但在重新出现时仍然有动画

Swift 4——尝试使用泛型来减少公式化代码的挑战

json - 在 JSON 中使用 nil 而不是 Optional(<null>) 作为空值