У меня есть два 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, все новое.
UPDATE
Я использовал следующий блок как в viewDidAppear (если в localstorage есть электронная почта, вместо экрана входа в систему отображается представление шагов расширения), так и в функции входа в систему, когда вход выполнен успешно, но он не переходит к этому ExtensionStepsView
let controller = "ExtensionStepsViewController"
let subview = ExtensionStepsViewController(nibName: NSNib.Name(rawValue: controller), bundle: nil)
self.view.addSubview(subview.view)
Вариант использования: show login at initial, но если пользователь вошел в систему, отобразить другое представление, но теперь проблема заключается в том, что представление объединено