如何将 xib 视图添加到视图控制器 swift 3
How to add xib view to view controller swift 3
我正在尝试将此 XIB 视图添加到我的 viewcontroller:
import UIKit
class TranslateView: UIView {
@IBOutlet var TranslateView: UIView!
override init(frame: CGRect){
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit(){
Bundle.main.loadNibNamed("TranslateView", owner: self, options: nil)
addSubview(TranslateView)
TranslateView.frame = self.bounds
TranslateView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
}
我正在将它加载到我的视图控制器中:
import UIKit
import AVFoundation
import Vision
class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {
let captureSession = AVCaptureSession()
let button: UIButton = {
let button = UIButton()
button.addTarget(self, action: #selector(ViewController.pressed(sender:)),for: .touchUpInside)
button.backgroundColor = UIColor.clear
button.setTitle("Translate", for: .normal)
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
setupCaptureSession()
view.addSubview(button)
}
@objc func pressed(sender: UIButton!) {
//add label
button.removeFromSuperview()
let headerView = Bundle.main.loadNibNamed("TranslateView", owner:
self, options: nil)?.first as? TranslateView
self.view.addSubview(headerView!)
headerView?.frame = CGRect(x:0, y: 0, width: view.frame.width, height: 50.0)
}
我删除了大部分代码以使这个问题简短。我没有使用故事板,因为我想使用实时摄像头视图作为我的应用程序的背景。而且这样做是最简单的。我想要发生的是,当我按下按钮时,整个屏幕应该被替换为 TranslateView.xib 的新视图。
希望有人能提供帮助。或者如果有更好更简单的方法然后使用 XIB 实现相同的结果让我知道。
请在 Swift 3 中给出一个代码示例,而不仅仅是解释要做什么,因为我已经知道我需要做什么,只是不知道如何编码。
我认为将 TranslationView
转换为 UIViewController
会更好。这不会是一个大的变化,但是将 TranslationView
添加到 ViewController
会简单得多。例如:
class TranslateView: UIViewController {
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: "TranslationView", bundle: nil)
}
}
然后您可以将此控制器加载到您的 ViewController
class 中,如下所示:
let headerView = TranslationView()
self.addChildViewController(headerView)
self.view.addSubview(headerView.view)
headerView.didMoveToParentViewController(self)
headerView.view.frame = CGRect(x:0, y: 0, width: view.frame.width, height: 50.0)
尝试更改此代码
let headerView = Bundle.main.loadNibNamed("TranslateView", owner:
self, options: nil)?.first as? TranslateView
对此
let headerView = TranslateView()
我正在尝试将此 XIB 视图添加到我的 viewcontroller:
import UIKit
class TranslateView: UIView {
@IBOutlet var TranslateView: UIView!
override init(frame: CGRect){
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit(){
Bundle.main.loadNibNamed("TranslateView", owner: self, options: nil)
addSubview(TranslateView)
TranslateView.frame = self.bounds
TranslateView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
}
我正在将它加载到我的视图控制器中:
import UIKit
import AVFoundation
import Vision
class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {
let captureSession = AVCaptureSession()
let button: UIButton = {
let button = UIButton()
button.addTarget(self, action: #selector(ViewController.pressed(sender:)),for: .touchUpInside)
button.backgroundColor = UIColor.clear
button.setTitle("Translate", for: .normal)
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
setupCaptureSession()
view.addSubview(button)
}
@objc func pressed(sender: UIButton!) {
//add label
button.removeFromSuperview()
let headerView = Bundle.main.loadNibNamed("TranslateView", owner:
self, options: nil)?.first as? TranslateView
self.view.addSubview(headerView!)
headerView?.frame = CGRect(x:0, y: 0, width: view.frame.width, height: 50.0)
}
我删除了大部分代码以使这个问题简短。我没有使用故事板,因为我想使用实时摄像头视图作为我的应用程序的背景。而且这样做是最简单的。我想要发生的是,当我按下按钮时,整个屏幕应该被替换为 TranslateView.xib 的新视图。
希望有人能提供帮助。或者如果有更好更简单的方法然后使用 XIB 实现相同的结果让我知道。
请在 Swift 3 中给出一个代码示例,而不仅仅是解释要做什么,因为我已经知道我需要做什么,只是不知道如何编码。
我认为将 TranslationView
转换为 UIViewController
会更好。这不会是一个大的变化,但是将 TranslationView
添加到 ViewController
会简单得多。例如:
class TranslateView: UIViewController {
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: "TranslationView", bundle: nil)
}
}
然后您可以将此控制器加载到您的 ViewController
class 中,如下所示:
let headerView = TranslationView()
self.addChildViewController(headerView)
self.view.addSubview(headerView.view)
headerView.didMoveToParentViewController(self)
headerView.view.frame = CGRect(x:0, y: 0, width: view.frame.width, height: 50.0)
尝试更改此代码
let headerView = Bundle.main.loadNibNamed("TranslateView", owner:
self, options: nil)?.first as? TranslateView
对此
let headerView = TranslateView()