I have a project in Xcode, lets name it A, in which I have a story board and several views. I only need part of project A. Hence, I made a new project, B, and made a new UIViewController, with xib, and copied the two UIViews from project A to B.
It looks like this now, where RPM Display and Speed Display are copied (by dragging from xib) from A to B.
AnalogDisplayContainer belongs to the class PD_AnalogDisplayContainer, and we have two outlets in class PD_AnalogDisplayContainer:
#property (nonatomic,assign) IBOutlet PD_AnalogDisplay* speedDisplay;
#property (nonatomic,assign) IBOutlet PD_AnalogDisplay* rpmDisplay;
which are connected to the respective views in xib. (We have exactly the same code in project A.) These UIViews have some UILabels as well, which are automatically copied in project B, and I need them as well. You see them here:
Up to here, the description of what I did. Now, the problem:
I have three outlets in class PD_AnalogDisplay.
#property (nonatomic, assign) IBOutlet UILabel* unitLabel;
#property (nonatomic, assign) IBOutlet UILabel* digitalIntegerValue;
#property (nonatomic, assign) IBOutlet UILabel* digitalFloatValue;
However, so strangely, when I click on the small point beside these outlets, it shows me the connections to story board,
and when I click on the connection, I see the whole storyboard and views from project A.
In addition, these connections are not shown when I click on xib.
I searched in project B, there is no storyboard, or all these things I see in the previous picture, in form of code. So I don't know where it all come from. And I get the run time error:
loaded the "RPMViewController" nib but the view outlet was not set.
Yes, it brings previous reference wherever you copy it.
It is happening because the class name is same in project A and B.
Create class name in project B other than class name in project A or slightly change variable name.
Assign that class to your xib file.
You must recreate the IBOutletes from xib file.
Just copy the interface components not the code in .h file.
Observations:
When I move project A to another location makes trick, reference destroyes.
Related
I have two projects. And there are two class which has the same name in each project. And these two classes have an iboutlet which has the same name. If i open only one project, it's normal. But if i open both, one of my iboutlet is connected to view in other project's storyboard.
Is this a bug of xcode?
I'm learning iOS and am new to the concept of IBOutlets - so I'm making a simple app in an attempt to learn how it works.
The problem:
I created an interface using a Storyboard and want to hook it up to an IBOutlet in my custom class ("TapCounter") in order to access (and be able to set) its text field. However when trying to hook my class' #property (nonatomic, weak, readwrite) IBOutlet UILabel* numberOfTapsTextField;
up to the UILabel in the Storyboard the line does not want to attach to the label.
Here is an image of the situation: http://gyazo.com/0050ef0a78772adcad214cdc4603f932 (Dragging a line from the hollow circle next to the #property to the label in the Storyboard does not snap to it).
I have not modified anything of the boilerplate code except for that I added #import "TapCounter.h" in viewController.m
This feels like it should be a very simple thing - but again; I am new to this.
EDIT
Have I got this idea wrong? Should all IBOutlets be in the viewController of a view (and simply be accessed by other custom classes)?
It work like this:
create a CustomView class
add a view in you storyBoard
set class for this custom view as CustomView in identity inspector cmd+opt+3
Create an IBOutlate of your component inside customView
Link those component with respective outlet
Refer Image:
This is a very simple question. I was following a very basic youtube video but a little bit in different way. I have a UIViewController. There is a button on that called "History". When I press history I need to open a table view and show the history. Step I did is:
Drag and Drop a UITableViewController
Create a new file which is UITableViewController
So I have UITableViewController.h and UITableViewController.m file
Now I want to connect this UITableView to this new class and implement it. In the video said I must press Ctrl and drop in on the .h file to create an IBoulet
After pressing connect this must appear
#property (strong, nonatomic) IBOutlet UITableView *tableView;
But in my xcode when I drag and take it to the .h file there is no plus sign to connect them together.
select your table view in interface builder. And at the right side of screen you will see object inspector menu. Write your custom class name here (like DinButton)
select table and then go to identity inspector in the right side of the xCode. (left to the Attribute inspector)
Then add your class name in the field "Class".
Thats it.
I'm developing a universal application.
in the first view, I have the login screen for the user.
In iPhone storyBoard, I have added 2 text field and one button( login check).
I have added properties in ViewController.h file by dragging those objects(Ctrl key + Dragg) to .h file.
I have added code for login check and it is working fine for iPhone.
This is the code in ViewController.h
#property (strong, nonatomic) IBOutlet UITextField *txtUserId;
#property (strong, nonatomic) IBOutlet UITextField *txtUserPwd;
#property (strong, nonatomic) IBOutlet UIButton *btnLogin;
In the iPad storyBoard, I have added 2 text field( userid and password) and i button for login.
So now, I want to bind those objects with the veriable which I declared already in ViewController.h file in case of iPhone.
My questions:
1. What is the right way to bind properties for both storyboard?
2. Am I on the right direction or should I think in a different way to do it?
I am new with iPhone development. Please help.
Thanks.
--Amin
Give your custom class name to storyboard from storyboard utility.
Ensure to link both the storyboards with your Login class. Now go to iPad storyboard, right click the view components and drag them and hover on to the properties you have declared already.
If I start with the very minimalist UI implementation consisting of adding a single UIButton (with the corresponding IBOutlet) to the default view in the default storyboard and adding an action method to my controller class, then everything works correctly (i.e. my action gets invoked when I tap the button).
Now, if I simply include MediaPlayer/MediaPlayer.h to my view controller header file, like that:
#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
#interface Playing_Video_FilesViewController : UIViewController
#property (nonatomic, strong) MPMoviePlayerController *moviePlayer;
#property (nonatomic, strong) IBOutlet UIButton *playButton;
#end
and add the MediaPlayer framework to the project, it crashes with the infamous "this class is not key value coding-compliant for the key playButton".
If I remove the MediaPlayer framework reference from the project, it stops to crash. If I instead remove the button but leave the MediaPlayer framework, it stops to crash as well.
Is there something else I should do to use MediaPlayer and a basic standard UI at the same time?
Edit:
I circumvented the problem by creating a .xib file instead of using the storyboard, like how it's done in the VideoPlayer sample application which doesn't use storyboards. Same code, but now it works.
I see this whenever I have an outlet or action that is no longer hooked up properly.
1.) Open storyboard
2.) Select playButton
3.) Remove all outlets and actions from this item
4.) Remove plugs from your class that were previously attached (especially in dealloc)
5.) Create new outlet and control-drag from the storyboard to your class. Good to go.
-A little overkill but gets the job done for me everytime.