【发布时间】:2018-09-04 05:21:42
【问题描述】:
我有两个 xib 文件,一个显示登录视图,另一个显示登录成功后的步骤。我很难让它发挥作用。我创建了 macos 项目而不是 ios 并使用 safariservices 以便它也适用于 safari 扩展。
这就是我所做的
import SafariServices
class SafariExtensionViewController: SFSafariExtensionViewController {
@IBOutlet weak var passwordMessage: NSTextField!
@IBOutlet weak var emailMessage: NSTextField!
@IBOutlet weak var message: NSTextField!
@IBOutlet weak var email: NSTextField!
@IBOutlet weak var password: NSSecureTextField!
static let shared = SafariExtensionViewController()
override func viewDidLoad() {
self.preferredContentSize = NSSize(width: 300, height: 250)
message.stringValue = ""
emailMessage.stringValue = ""
passwordMessage.stringValue = ""
}
override func viewDidAppear() {
if let storedEmail = UserDefaults.standard.object(forKey: "email") as? String {
if let stepView = Bundle.mainBundle.loadNibNamed(NSNib.Name(rawValue: "ExtensionStepsViewController"), owner: nil, topLevelObjects: nil)[0] {
self.view.addSubview(stepView)
}
}
}
@IBAction func userLogin(_ sender: Any) {
let providedEmailAddress = email.stringValue
let providedPassword = password.stringValue
let isEmailAddressValid = isValidEmailAddress(emailAddressString: providedEmailAddress)
self.message.stringValue = ""
emailMessage.stringValue = ""
passwordMessage.stringValue = ""
if isEmailAddressValid && providedPassword.count > 0 {
/* login process is handled here and store the email in local storage /*
/* TODO for now email is not stored in browser localstorage which has to be fixed */
let controller = "ExtensionStepsViewController"
let subview = ExtensionStepsViewController(nibName: NSNib.Name(rawValue: controller), bundle: nil)
self.view.addSubview(subview.view)
}
}
}
这样我会得到像Type Bool has no subscript members 这样的错误,我的文件结构看起来像这样。
SafariExtensionViewController.xib(最初显示的主要 带有登录屏幕)
SafariExtensionViewController.swift
ExtensionStepsViewController.xib(这个视图应该在用户使用时显示 已登录而不是登录屏幕)
ExtensionStepsViewController.swift
我正在使用 xcode 10、swift 4,一切都是新的。
更新
我在 viewDidAppear(如果本地存储中有电子邮件,则显示扩展步骤视图而不是登录屏幕)和登录功能内部都使用了以下块,当登录成功但它没有导航到该 ExtensionStepsView
let controller = "ExtensionStepsViewController"
let subview = ExtensionStepsViewController(nibName: NSNib.Name(rawValue: controller), bundle: nil)
self.view.addSubview(subview.view)
用例是在初始时显示登录,但如果用户已登录,则显示另一个视图,但问题是现在视图已合并
【问题讨论】:
-
nib 文件中有 UIView 或 UIView 控制器吗?
-
它来自使用 cocoa 的 NSViewController。
-
@TushantKhatiwada 你能和我分享你在谷歌驱动器上的例子吗?非常感谢你!!!
标签: swift xcode macos safari swift4