/ / En Swift, ¿cómo puedo navegar a otro controlador de vista sin guiones gráficos? - Swift, navegación, push, viewcontroller

En Swift, ¿cómo puedo navegar a otro controlador de vista sin guiones gráficos? - Swift, navegación, push, viewcontroller

En Swift, ¿cómo puedo navegar a otro controlador de vista sin guiones gráficos?

Nuevo en Swift: el objetivo C era una tarea

No usar storyboards

Tener una aplicación tabulada creada manualmente.

primera pestaña es ReceiptsVC

  • incluye una vista de tabla
  • incluye una barra de navegación con el botón EDITAR de la tabla y un botón "nuevo" para ir a "NewVC"; el botón llama a la función newButtonAction2 ()

en viewdidload

let navigationBar = UINavigationBar(frame: CGRectMake(0, 20, self.view.frame.size.width, 44)) // Offset by 20 pixels vertically to take the status bar into account
navigationBar.backgroundColor = UIColor.whiteColor()
navigationBar.delegate = self;

// Create a navigation item with a title
let navigationItem = UINavigationItem()
navigationItem.title = "Receipts"

// create the "new" button
var rightButton = UIBarButtonItem(title: "New", style: UIBarButtonItemStyle.Plain, target: self, action: "newButtonAction2")

// add table edit button to navigation bar
navigationItem.leftBarButtonItem =  editButtonItem()
// add new button to navigation bar
navigationItem.rightBarButtonItem = rightButton

// Assign the navigation item to the navigation bar
navigationBar.items = [navigationItem]

// Make the navigation bar a subview of the current view controller
self.view.addSubview(navigationBar)

...

func  newButtonAction2() {

println( "newButtonAction2 firing ")



//let vc = NewVC(nibName: "NewVC", bundle: nil)
//navigationController?.pushViewController(vc, animated: true)

var vc = NewVC(nibName: "NewVC", bundle: nil)

navigationController?.pushViewController(vc, animated: true)

println( "newButtonAction2 firing  FINISHED")

}

la salida es

newButtonAction2 disparo newButtonAction2 firing FINISHED (El NewVC nunca aparece)

Puedo "presentar" el controlador de vista (modalmente) pero pierdo la barra de pestañas

delegado de la aplicación

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {


let tabBarController = UITabBarController()
//let myVC1 = TestViewController(nibName: "TestViewController", bundle: nil)
let myVC1 = ReceiptsVC(nibName:  "ReceiptsVC", bundle: nil)
let myVC2 = PieVC(nibName:  "DummyVC", bundle: nil)
let myVC3 = PieVC(nibName:  "DummyVC", bundle: nil)
let myVC4 = PieVC(nibName:  "DummyVC", bundle: nil)
let myVC5 = PieVC(nibName:  "DummyVC", bundle: nil)
let myVC6 = PieVC(nibName:  "DummyVC", bundle: nil)
let controllers = [myVC1,myVC2,myVC3,myVC4,myVC5,myVC6]
tabBarController.viewControllers = controllers
window?.rootViewController = tabBarController
let firstImage = UIImage(named: "Receipts25.png")
let secondImage = UIImage(named: "Tab2.png")
let Image3 = UIImage(named: "Tab3.png")
let Image4 = UIImage(named: "Tab4.png")
let Image5 = UIImage(named: "Tab5.png")
let Image6 = UIImage(named: "Tab6.png")
myVC1.tabBarItem = UITabBarItem(title: "Receipts", image: firstImage, tag: 1)
myVC2.tabBarItem = UITabBarItem(title: "tab2", image: secondImage, tag:2)
myVC3.tabBarItem = UITabBarItem(title: "tab3", image: Image3, tag:3)
myVC4.tabBarItem = UITabBarItem(title: "tab4", image: Image4, tag:4)
myVC5.tabBarItem = UITabBarItem(title: "tab5", image: Image5, tag:5)
myVC6.tabBarItem = UITabBarItem(title: "tab6", image: Image6, tag:6)

//   self.navigationController = UINavigationController(rootViewController: tabBarController)

// self.navigationController = UINavigationController(rootViewController: ReceiptsVC())
// self.window!.rootViewController = self.navigationController



// Override point for customization after application launch.
return true
}

Respuestas

0 para la respuesta № 1

Creo que necesitas controladores de navegación para cada controlador de vista en tabbarcontroller.

me gusta

let myVC1 = UINavigationController(rootViewController: ReceiptsVC(nibName:  "ReceiptsVC", bundle: nil))

0 para la respuesta № 2

Para insertar un controlador de vista en una pila de navegación, debe tener una pila de navegación. La propiedad self.navigationController es nil a menos que self sea un controlador de vista que sea propiedad de un controlador de navegación.

Este método llama:

navigationController?.pushViewController(vc, animated: true)

Todos se omiten si navigationController es nulo.

Si tiene un controlador de barra de pestañas y cada pestaña ense supone que la barra de pestañas debe tener su propia pila de navegación, debe configurar esas pestañas para que apunten a los controladores de navegación que luego contienen un controlador de vista raíz.

Por lo tanto, debe modificar todos sus nibiles para que cada controlador de vista que coloque en la barra de pestañas esté incluido en un controlador de navegación.

Parece que estás usando nibfiles en lugar de guiones gráficos. Eso es ciertamente más fácil que construir tu interfaz de usuario totalmente en código.