So gerade hinzufügt Ich habe meine AppDelegate gesetzt meine CustomTabBarController den Root-View-Controller zu machen:Wie ein Anmeldebildschirm Vor meinem TabViewController
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
FIRApp.configure()
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.makeKeyAndVisible()
window?.rootViewController = CustomTabBarController()
return true
}
In meiner TabBarController.swift Datei, die ich mit der viewDidLoad Funktion außer Kraft setzen:
override func viewDidLoad() {
super.viewDidLoad()
// Custom view controllers
let layout = UICollectionViewFlowLayout()
let friendsController = ContactsController(collectionViewLayout: layout)
let recentMessagesNavController = UINavigationController(rootViewController: friendsController)
recentMessagesNavController.tabBarItem.title = "DMs"
recentMessagesNavController.tabBarItem.image = UIImage(named: "")
viewControllers = [recentMessagesNavController, createDummyNavControllerWithTitle("Groups", imageName: ""), createDummyNavControllerWithTitle("Submit", imageName: ""), createDummyNavControllerWithTitle("Search", imageName: ""), createDummyNavControllerWithTitle("Other", imageName: "")]
}
Nach dass meine ContactsController.swift Datei hat dieses:
private let cellID = "cellID"
override func viewDidLoad() {
super.viewDidLoad()
// Navigation bar
navigationItem.title = "Direct Messages"
collectionView?.backgroundColor = UIColor.whiteColor()
collectionView?.alwaysBounceVertical = true
collectionView?.registerClass(MessageCell.self, forCellWithReuseIdentifier: cellID)
setupData()
// Fetch messages provided by the fetch controller
do {
try fetchedResultsController.performFetch()
} catch let err {
print(err)
}
}
Ich habe derzeit keine Storyboard-Datei, da alle meine Ansichten programmgesteuert erstellt werden. Ich habe versucht, einen Anmeldebildschirm hinzuzufügen, der auftaucht und den TabBarController blockiert, wenn der Benutzer nicht eingeloggt ist, aber ich kann nicht den besten Weg finden, dies zu implementieren, ohne Fehler zu bekommen. Im Moment sind in meinem SignInViewController benutzerdefinierte Elemente programmgesteuert erstellt. Was ist die Methode, um mein Problem zu lösen?
Edit für Kommentare: Derzeit meine SignInViewController haben dies:
override func viewDidAppear(animated: Bool) {
if let user = FIRAuth.auth()?.currentUser {
self.signedIn(user)
}
collectionView?.registerClass(BaseCell.self, forCellWithReuseIdentifier: cellID)
collectionView?.backgroundColor = UIColor.blueColor()
collectionView?.alwaysBounceVertical = false
tabBarController?.tabBar.hidden = true
view.addSubview(loginContainerView)
view.addConstraintWithFormat("H:|[v0]|", views: loginContainerView)
view.addConstraintWithFormat("V:|[v0]|", views: loginContainerView)
setupInputComponents()
}
private let cellID = "cellID"
var bottomConstraint: NSLayoutConstraint?
private func setupInputComponents() {
let loginControls = UIView()
loginControls.backgroundColor = UIColor.yellowColor()
loginContainerView.addSubview(emailField)
loginContainerView.addSubview(passwordField)
loginContainerView.addSubview(loginButton)
loginContainerView.addSubview(signUpButton)
loginContainerView.addSubview(passwordResetButton)
loginContainerView.addConstraintWithFormat("H:|[v0]|", views: emailField)
loginContainerView.addConstraintWithFormat("V:|[v0]|", views: emailField)
loginContainerView.addConstraintWithFormat("H:|[v0]|", views: passwordField)
loginContainerView.addConstraintWithFormat("V:|[v0]|", views: passwordField)
loginContainerView.addConstraintWithFormat("H:|[v0]|", views: loginButton)
loginContainerView.addConstraintWithFormat("V:|[v0]|", views: loginButton)
loginContainerView.addConstraintWithFormat("H:|[v0]|", views: signUpButton)
loginContainerView.addConstraintWithFormat("V:|[v0]|", views: signUpButton)
loginContainerView.addConstraintWithFormat("H:|[v0]|", views: passwordResetButton)
loginContainerView.addConstraintWithFormat("V:|[v0]|", views: passwordResetButton)
}
Ich mag die Prämisse, den rootViewController nicht zu ändern. Wenn ich das addiere, erhalte ich den Fehler: "Benutze Instanzmitglied 'presentViewController' auf dem Typ 'UIViewController'; wollten Sie stattdessen einen Wert vom Typ 'UIViewController' verwenden?" Was bedeutet das/wie repariere ich es? – About7Deaths
Wie nennt man 'presentViewController'? Könntest du es hier schreiben? –
Nennen Sie es nicht so "UITabBarController.presentViewController" es ist falsch, Sie müssen es so nennen: 'tabBarController.presentViewController' wo' tabBarController' ist Ihre initialisierte Tableiste Controller –