Classes for new View Controller in Storyboard - iphone

In my storyboard I drag on a new View Controller. My Storyboard now has two view controllers: the main one that came when I created the file, and the one a dragged on.
When I go into the 'assistant editor' and select the main view controller, I get the ViewController.h class. But when I select the other controller I get UIViewController.h which is an Apple file.
How do I link/create these classes for each View Controller? Is there an automated way to do this, or am I not doing it right.

You need to create your own subclass of UIViewController and set the newly created view controller as the custom class in the storyboard.
Press cmd+n or go to File > New File
Select Objective-C class and hit next
Type UIViewController into the second box and type a name for the new class in the first box (which will be something like MyClassViewController)
Go into your storyboard, select the View Controller you dragged out, look at the inspector and go to the Custom Class Tab and set the custom class to your newly created view controller (e.g. MyClassViewController)

Related

Connecting an NSTextField object to an IBOutlet in AppDelegate.swift

Recently, I've been trying to learn Swift, so if this seems to be a relatively simple question do forgive me.
For some reason, control-clicking a NSTextField object in a tab view controller and dragging doesn't give me the option to "insert outlet or action" but rather, "connect binding" when I scroll over a compatible object (in this case it was the superclass declaration).
Why is it that I am not able to insert an outlet or an action, but am able to connect a binding?
side question: what is a binding?
The outlet can only be a property of your nib file / storyboard scene's owner. Which is your view controller in most cases.
This is what happen what your view controller instantiated from storyboard:
Instantiates views using the information in your storyboard file.
Connects all outlets and actions.
Assigns the root view to the view controller’s view property.
Calls the view controller’s awakeFromNib method.
When this method is called, the view controller’s trait collection is empty and views may not be in their final positions.
Calls the view controller’s viewDidLoad method.
Use this method to add or remove views, modify layout constraints, and load data for your views.
Short Version:
UIKit instantiate your view controller for you, and add all subview as you required in storyboard. And connect(binding) subViews to their outlet (if you created one).
How to solve your problem
When you opened your assistant editor. Choose the automatic viewController, if that is not something your create, you should create a subclass of viewController you need (in this case, UITabViewController) and change your scene's class to that.
you need to have same view controller in storyboard when you control-drag a NSTextField to controller
Edit: As Leo mentioned in the comment You can't connect/create any IBOutlet in the AppDelegate file if you are using storyboard, you have to create in it's particular controller where you have placed NSTextField
Storyboard
As shown in the image if you are in storyboard click the top bar on the controller from there you will get the options shown in the image, select Automatic
If you have selected proper view controller in the storyboard it should show same viewcontroller file in the Automatic(viewController.swift) by selecting that file you should able to control-drag IBOutlet
XIB
In the Xib when you select Xib and click 'Asssistant Editor' it will generally take to the proper view controller if not select Automatic for it also as shown in the Storyboard image are that you will able to connect you IBOultet
Binding
When you control-drag IBOutlet it create a connection between your control and property of view controller
From Apple Doc
The Cocoa bindings feature enables you to establish a live connection between an item of data and its presentation in a view. Any change made to the data’s value, either in the view or in the object that stores the data, automatically propagates across the connection.
You can find more information regarding it in Apple Doc

View controller suddenly wont connect to .h file

I created a new View Controller, I then opened up and created a new filed (Objective-C class) and then created a subclass of UIVewcontroller. I added my table views and labels in story board and now suddenly it wont connect them to the .h subclass Ive created. Any suggestions?
You have to name that the view controller is part of your class. Select your view controller and on the third tab on the right write the name of your view controller. Here is a picture I got from this tutorial to help:

Can't load view from an external xib?

The project i'm using is the sample code named "Tabster" provided by Apple.
I can load a view from a external xib by this:
In MainWindow.xib, drag a view controller to the tab bar controller.
File -> New -> File, add a new class named "NewTabItemA", subclass of UIViewController, with "With XIB for User Interface." selected.
In MainWindow.xib, change the Class of the new view controller to "NewTabItemA" in Identity Inspector and change the NIB Name to "NewTabItemA" in Attributes Inspector.
I can NOT load a view from a external xib while only the second step is different.
In MainWindow.xib, drag a view controller to the tab bar controller.
File -> New -> File, add a new class named "NewTabItemB", subclass of UIViewController, leave "With XIB for User Interface." unselected.
File -> New -> File, add a new xib file from the "View" template, name it as "NewTabItemB".
In NewTabItemB.xib, change the file owner to "NewTabItemB".
Control drag the file owner to the View, set it as the file owner's outlet.
In MainWindow.xib, change the Class of the new view controller to "NewTabItemB" in Identity Inspector and change the NIB Name to "NewTabItemB" in Attributes Inspector.
What did i miss?
Thank you all in advance.
Have you tried to change identifier of the xib? In interface builder click on window and set it in the properties. (3d tab)

viewDidLoad nor init are being called at application start iphone

This is a novice error for sure. In Xcode 4 i have created a Window Based application in which i put a TabBarController as the root controller. When the application starts, the first tab of the tabbar is selected and thus the view corresponding to that tab is shown. The problem is that the View Controller that corresponds to that view in the first tab is not being read, i put some logs in the init, viewWillLoad, and viewDidLoad methods and none of them are being shown. I have linked the controllers correctly, plus Xcode links them automatic if you select that option when creating a new view controller. Here's how it looks like in my project.
This is how it looks like in the tab controller i have linked to the view.nib:
And this is the view, it is linked to the view controller:
And here's the View Connected to the File's Owner Outlet:
Everything looks fine for me so i don't understand why it's not calling those methods in the view controller when the application starts or when the tab corresponding to that view is being selected.
Thanks in advance for the help.
I fixed it. The problem was that the referencing class was UIViewController intead of the view controller i created for it. The answer was to go to MainWindow.xib then select View Controller - Home then go to Identity Inspector and select the View Controller i created for it in this case the HomeViewController.h

How to edit the MainWindow.xib (to change the default view it loads)

Hi I am trying to change the default view MainWindow.xib loads. I am using view based app. I changed the app delegate file, added my new view as a subview to the main window. but in interface builder it still says mainwindow.xib loads from the default view not my newly added view. (BTW I added a new xib file for my new view and that is the one I want to load at startup.)
thanks.
If you want to change from using MyAppViewController.xib to `MyOtherView.xib', you also need to change the class of the view controller in Interface Builder. You can do this by selecting the view controller, going to the Identity tab (the last one) and putting the class name of your new view controller in the "Class" field.
Change the 'Main nib file base name' in the Info.plist of your App too if you have another Main.XIB.