框架 ViewController 视图未显示
Framework ViewController View Not showing
我正在尝试创建一个包含视图控制器的框架 (Login VC)。我已成功导入框架并显示 VC,但未显示视图。我在导入的 viewDidLoad 中有一个打印功能,它正在打印。我错过了什么?
框架VC:
public class LoginVC: UIViewController {
@IBOutlet weak var button: UIButton! {
didSet {
button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
}
}
public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override public func viewDidLoad() {
super.viewDidLoad()
print("View Loaded") // Firing
}
@objc func buttonPressed() {
print("hello")
}
}
框架VC Xib:
这是我展示框架时的视图调试器VC
-- 更新:这就是我展示 VC ---
的方式
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let homeViewController = LoginVC()
homeViewController.view.backgroundColor = UIColor.white
window!.rootViewController = homeViewController
window!.makeKeyAndVisible()
return true
}
-- 更新--
由于很多评论都与应用程序代理有关,我先介绍一个通用的 ViewController,然后再介绍我的登录框架 VC。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let homeViewController = ViewController()
homeViewController.view.backgroundColor = UIColor.white
window!.rootViewController = homeViewController
window!.makeKeyAndVisible()
return true
}
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton! {
didSet {
button.addTarget(self, action: #selector(presentNext), for: .touchUpInside)
}
}
@objc func presentNext() {
let loginVC = LoginVC()
present(loginVC, animated: true, completion: nil)
}
}
现在,当我显示登录框架时,我得到的只是黑屏。
-- 更新--
我可以在 viewdidLoad 中更改视图的背景颜色,但是 xib 视图没有显示。这是为什么?..
您需要在 ViewController 实际出现后调用您的 presentNext() -- 不在 viewDidLoad,甚至 viewWillAppear.
像这样:
class ViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
presentNext()
}
@objc func presentNext() {
let loginVC = LoginVC()
present(loginVC, animated: true, completion: nil)
}
}
这是工作测试项目:
https://github.com/drewster99/SO_LoginVC
此外,也许仔细检查您的 ViewController.xib 是否实际为按钮附加了 IBOutlet。实际上必须是这样。其他一切看起来都不错。
这是我得到的:
AppDelegate:
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let homeViewController = ViewController()
homeViewController.view.backgroundColor = UIColor.white
window!.rootViewController = homeViewController
window!.makeKeyAndVisible()
return true
}
}
ViewController.swift:
import UIKit
import LoginFrameworkThing
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton! {
didSet {
button.addTarget(self, action: #selector(presentNext), for: .touchUpInside)
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
@objc func presentNext() {
print("Presenting next...")
let loginVC = LoginVC()
present(loginVC, animated: true, completion: nil)
}
}
按钮连接在ViewController,框架中存在LoginVC(.xib和.swift)。
我更新了示例项目。检查 link.
xibs 连接到 viewController 的框架需要从包中显式加载。
通常我们用xib创建一个cocoaTouch UIViewController的时候,这个是帮我们处理的。但是使用frameworks的时候,没有处理
为了解决这个问题,我在 viewDidLoad
中添加了加载 xib
override func viewDidLoad() {
super.viewDidLoad()
// Frameworks require loading of the xib to connect xib to view controller
let bundle = Bundle(for: type(of: self))
bundle.loadNibNamed("viewControllerName", owner: self, options: nil)
}
我正在尝试创建一个包含视图控制器的框架 (Login VC)。我已成功导入框架并显示 VC,但未显示视图。我在导入的 viewDidLoad 中有一个打印功能,它正在打印。我错过了什么?
框架VC:
public class LoginVC: UIViewController {
@IBOutlet weak var button: UIButton! {
didSet {
button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
}
}
public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override public func viewDidLoad() {
super.viewDidLoad()
print("View Loaded") // Firing
}
@objc func buttonPressed() {
print("hello")
}
}
框架VC Xib:
这是我展示框架时的视图调试器VC
-- 更新:这就是我展示 VC ---
的方式func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let homeViewController = LoginVC()
homeViewController.view.backgroundColor = UIColor.white
window!.rootViewController = homeViewController
window!.makeKeyAndVisible()
return true
}
-- 更新--
由于很多评论都与应用程序代理有关,我先介绍一个通用的 ViewController,然后再介绍我的登录框架 VC。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let homeViewController = ViewController()
homeViewController.view.backgroundColor = UIColor.white
window!.rootViewController = homeViewController
window!.makeKeyAndVisible()
return true
}
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton! {
didSet {
button.addTarget(self, action: #selector(presentNext), for: .touchUpInside)
}
}
@objc func presentNext() {
let loginVC = LoginVC()
present(loginVC, animated: true, completion: nil)
}
}
现在,当我显示登录框架时,我得到的只是黑屏。
-- 更新--
我可以在 viewdidLoad 中更改视图的背景颜色,但是 xib 视图没有显示。这是为什么?..
您需要在 ViewController 实际出现后调用您的 presentNext() -- 不在 viewDidLoad,甚至 viewWillAppear.
像这样:
class ViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
presentNext()
}
@objc func presentNext() {
let loginVC = LoginVC()
present(loginVC, animated: true, completion: nil)
}
}
这是工作测试项目:
https://github.com/drewster99/SO_LoginVC
此外,也许仔细检查您的 ViewController.xib 是否实际为按钮附加了 IBOutlet。实际上必须是这样。其他一切看起来都不错。
这是我得到的:
AppDelegate:
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let homeViewController = ViewController()
homeViewController.view.backgroundColor = UIColor.white
window!.rootViewController = homeViewController
window!.makeKeyAndVisible()
return true
}
}
ViewController.swift:
import UIKit
import LoginFrameworkThing
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton! {
didSet {
button.addTarget(self, action: #selector(presentNext), for: .touchUpInside)
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
@objc func presentNext() {
print("Presenting next...")
let loginVC = LoginVC()
present(loginVC, animated: true, completion: nil)
}
}
按钮连接在ViewController,框架中存在LoginVC(.xib和.swift)。
我更新了示例项目。检查 link.
xibs 连接到 viewController 的框架需要从包中显式加载。
通常我们用xib创建一个cocoaTouch UIViewController的时候,这个是帮我们处理的。但是使用frameworks的时候,没有处理
为了解决这个问题,我在 viewDidLoad
中添加了加载 xiboverride func viewDidLoad() {
super.viewDidLoad()
// Frameworks require loading of the xib to connect xib to view controller
let bundle = Bundle(for: type(of: self))
bundle.loadNibNamed("viewControllerName", owner: self, options: nil)
}