UINavigationBar not showing - swift

I have a swift project that is programmatic and segues from a mapview to another view. After the segue the navigation bar is not present. Since the files were copied over from an earlier project where this doesn't happen I'm perplexed. It should be very straight forward.
In AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.main.bounds)
let homeViewController = MapViewController()
self.navigationController = UINavigationController()
self.navigationController?.setNavigationBarHidden(false, animated: false)
navigationController?.viewControllers = [homeViewController]
self.window!.rootViewController = navigationController
self.window?.makeKeyAndVisible()
let attributes = [NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Light", size: 17)!]
UINavigationBar.appearance().titleTextAttributes = attributes
return true
}
And the segue code called in the MapViewController:
let storeViewController = ViewController()
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.navigationController?.setNavigationBarHidden(false, animated: false)
appDelegate.navigationController?.pushViewController(storeViewController, animated: true)

You have to embedded MapViewController in UINavigationController and Push ViewControllers as needed
to hide use self.navigationController?.isNavigationBarHidden = false
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.main.bounds)
let homeViewController = MapViewController()
let navController = UINavigationController(rootViewController: homeViewController)
self.window!.rootViewController = navController
self.window?.makeKeyAndVisible()
let attributes = [NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Light", size: 17)!]
UINavigationBar.appearance().titleTextAttributes = attributes
return true
}
and in MapViewController
To navigate:
let storeViewController = ViewController()
self.navigationController?.pushViewController(storeViewController, animated: true)
//if you want to hide or show navigation
//self.navigationController?.isNavigationBarHidden = false // true

Related

How to navigate to a UIViewController programmatically?

I am having difficulties navigating to a UIViewController programmatically from within another UIViewController. I am using UIKit and Swift 5.
I have tried to follow this Medium article but can't get it to work for me.
In my AppDelegate file I have changed the didFinishLaunchingWithOptions function to this:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = LoginViewController()
self.window?.makeKeyAndVisible()
return true
}
And then in my LoginViewController() I attempt to navigate to my DashboardViewController by doing the following:
override func viewDidLoad() {
super.viewDidLoad();
// present a modal with an embed UINavigationController
let rvc = DashboardViewController()
let vc = UINavigationController(rootViewController: rvc)
vc.modalPresentationStyle = .overFullScreen
present(vc, animated: true, completion: nil)
}
But DashboardViewController is never called.
What am I doing wrong and how can I change the code to work?
Thank you.
Try this in your viewDidLoad method:
let rvc = self.storyboard!.instantiateViewControllerWithIdentifier("DashboardViewController") as! DashboardViewControllerSwift
let navController = UINavigationController(rootViewController: rvc)
navController.modalPresentationStyle = .overFullScreen
self.present(navController, animated:true, completion: nil)
Change DashboardViewControllerSwift to the name of your Swift file for your DashboardViewController, without the .swift bit. Make sure it is set as the class for DashboardViewController object in IB/Storyboard.
Also ensure the DashboardViewController object in IB/Storyboard has its Storyboard Identifier set as DashboardViewController.
1- start with SceneDelegate
self.window = UIWindow(windowScene: windowScene)
let navigation = UINavigationController()
window.rootViewController = navigation
window?.makeKeyAndVisible()
2-then
let rvc = DashboardViewController()
self.navigationController?.pushViewController(rvc, animated: true)
3- try it in viewDidLoad() if not work try it in viewWillAppear
I ended up coming across a Youtube video that helped me solve my issue.
AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let login = LoginViewController()
let navigationController = UINavigationController(rootViewController: login)
navigationController.setNavigationBarHidden(true, animated: true)
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
return true
}
LoginViewController
let dashboard = DashboardViewController()
self.navigationController?.pushViewController(dashboard, animated: true)

Changed from Navigation to TabBar, CoreData does not load

I changed my Navigation Controller to Tab Bar Controller, then I wanted to compile the app. But it does not load my managedContext anymore.
This is my launching code when I load the app:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
guard let navController = window?.rootViewController as? UINavigationController,
let viewController = navController.topViewController as? ViewController else {
return true
}
viewController.managedContext = coreDataStack.managedContext
// Override point for customization after application launch.
return true
}
Therefore I tried to edit the code like this:
Edit:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateInitialViewController()
//let controller = storyboard.instantiateViewController(withIdentifier: "TabBarVC")
self.window?.rootViewController = controller
guard let tabController = window?.rootViewController as? UITabBarController,
let navController = tabController.viewControllers![0] as? UINavigationController,
let viewController = navController.topViewController as? ViewController else {
return true
}
// Version that works for UINavigationCOntroller
// guard let navController = window?.rootViewController as? UINavigationController,
// let viewController = navController.topViewController as? ViewController else {
// return true
// }
viewController.managedContext = coreDataStack.managedContext
// Override point for customization after application launch.
return true
}
I changed the code, but I still can not load managedContext, and it returns nil when I want to use it in ViewController, I also set the initial Viewcontroller to the tabBarController.
Set rootviewcontroller for your window first and then right your logic afterwards.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let storyboard = UIStoryboard(<StoryboardName>, bundle: nil)
let controller = storyboard.initializeInitialViewController()
window.rootViewController = controller
guard let navController = window?.rootViewController as? UITabBarController,
let viewController = navController.moreNavigationController as? ViewController else {
return true
}
viewController.managedContext = coreDataStack.managedContext
// Override point for customization after application launch.
return

how to create very first view for Swift 3

Hi I have made a ViewController.
But I don't know how to add very first view right after an app is tapped.
I added below codes in ViewController.swift
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "FirstViewController")
self.present(controller, animated: true, completion: nil)
the FirstViewController appears after the app tapped and shows white background for about a second.
When you first launch your app, the LaunchScreen.storyboard is displayed, as a transition while your app is loading. You can customise this in Interface Builder.
check the option 'is initial view Controller' for that firstViewController from the storyboard.
You can set initial view controller programmatically or via storyboard
Method 1:programmatically--
Set storyboard-identifire for Viewcontroller in Main.storyboard file
like
After that set rootviewController in Appdelegate class.
import UIKit
#UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
let redViewController = mainStoryBoard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
window?.rootViewController = redViewController
window?.makeKeyAndVisible()
return true
}
}
For setting up with navigation controller use UINavigationController -
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
let viewController = mainStoryBoard.instantiateViewController(withIdentifier: "viewController") as! viewController
let navigationController = UINavigationController(rootViewController: viewController)
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
return true
}
Method 2:Via storyboard--
Go to respective storyboard & select Is Initial View Controller

MMDrawer Swift 2 Redirect to MMDrawer How to set on Click

I want to redirect login view controller to mmdrawer controller in swift
if I am making only mmdrawer it works well because the code is under Appdelegate is working perfect .
var window: UIWindow?
var centerContainer: MMDrawerController?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
_ = self.window!.rootViewController
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
// let centerViewController = mainStoryboard.instantiateViewControllerWithIdentifier("LoginPageViewController") as! LoginView
//var rootViewController = centerViewController
let centerViewController = mainStoryboard.instantiateViewControllerWithIdentifier("CenterController") as! ViewController
let leftViewController = mainStoryboard.instantiateViewControllerWithIdentifier("LeftSideViewController") as! LeftSideDrawer
let leftSideNav = UINavigationController(rootViewController: leftViewController)
let centerNav = UINavigationController(rootViewController: centerViewController)
centerContainer = MMDrawerController(centerViewController: centerNav, leftDrawerViewController: leftSideNav)
centerContainer!.openDrawerGestureModeMask = MMOpenDrawerGestureMode.PanningCenterView;
centerContainer!.closeDrawerGestureModeMask = MMCloseDrawerGestureMode.PanningCenterView;
window!.rootViewController = centerContainer
window!.makeKeyAndVisible()
return true
but my question is how to add login view controller so can redirect it to mmdrawer on sucess .
Thanks

How to add UIView on window in app delegate in swift?

view object is not getting in addsubview bracket
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool
{
// Override point for customization after application launch.
UIApplication.sharedApplication().setStatusBarHidden(true, animated: true);
var myView = UIView(frame:CGRectMake(0, 200, 320, 100));
myView.backgroundColor = UIColor.redColor()
self.window.?.addSubview(myView)
return true
}
Try to use so if access through UIViewController
let win:UIWindow = UIApplication.sharedApplication().delegate!.window!!
win.addSubview(self)
please, do the implementation for the stack properly, like e.g. this:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
window = UIWindow(frame: UIScreen.mainScreen().bounds)
let mainViewController: MainViewController = MainViewController(nibName: "MainViewController", bundle: nil)
window!.rootViewController = mainViewController
window!.makeKeyAndVisible()
return true
}
In addition to your code,
for UIApplication Root view controller's viewDidAppear Function
add below code.
override func viewDidAppear(animated: Bool)
{
super.viewDidAppear(animated)
UIApplication.sharedApplication().delegate!.window!!.bringSubviewToFront((UIApplication.sharedApplication().delegate!.window!!.subviews[0]))
}
Hope that helps :)