I am trying a little ios project for the first time. So I apologize for asking the trivial.
I have two views (I copied and pasted ‘view1’ and the new views name was view11)
Each has a button with a single action:
button in view1: >>View1.pushto(View11)<<
button in view11: >>View11.pushto(View1)<<
The goal is that the buttons result in the other view being displayed.
I get the following error:
Expected a value of type class iOSView bt found a static reference to class View1.view1<<
and
Static reference to instance method: call this on an instance of class iOSView<<
But aren’t view1 and 2 instances of class iOS View?
Hi Derk, thanks for you patience. I noted indeed that a view has no events like ‘open’ ‘close’ etc. Those are the events that I use to manipulate windows in the desktop-XOJO.
So when I have view1 then it is a class? It doesn’t show in the inspector.
Anyway, apart from my conceptual problems I have still the same/similar error message when using exactly the syntax from you and the manual. This code is all there is in View1.button1 action:
Var myView As New View11
View1.PushTo(myView) //if View1 is currently visible
and that code should be executed when I press the button1 in the View1 screen. But the compiler objects.
Errors:
Var myView as New View11, line 1 Syntax error Var myView = New View11
View11.PushTo(myView), line2, This item does not exist
View1.PushTo(myView), line 2. Parameter NewView expects iOSView but the is type int32
I really hope this is not something weird in may XOJO. Is there a discussion on the conceptual background somewhere in the documentation? Why are windows in the desktop so different from views for instance. Or is there a an example where i can check how switching screens is done.
View and windows are classes. You use instance of them.
For Windows on desktop you can call them directly and doing so you create an implicit instance (but you can avoid this with a flag, it’s implicit instance in the window inspector)
On iOS you define your view (for example a class named view11 with super iosView)
to navigate from another view to this one you have to:
create the istance
Navigate to the new instance
or in code
Var myView as new view11
self.pushTo(myView)
or simply
self.pushTo(new view11)
Views are stacked one over the other (that’s the meaning of push) and in this way they are really different from windows in desktop.
On iOS you can interact only with a view .
Pushing the new view on your stack will let you interact with the new view, an if you have defined it with a navigation bar visible, you will have a back button. If you press the back button the current view is popped from the stack and you can interact with the original view (and the popped one will be destroyed)
You can test this easly even with only a view
Say you edit in new project the view1 a button with this code in it’s action event:
self.pushTo(new view1)
and in the view’s open event:
Static n As Integer
n=n+1
button1.Caption=n.ToText
enable the navigation bar in view1
Run the app
you will see a button with a 1
press it you will see a button with a 2 and a back button
and so on. And you can’t go back from the first one.
Xojo for iOS can have its limitations, but for this basic stuff works very well.
Thanks Antonio,
Interestingly the self.PushTo(New View11) compiles wo errors and works. So now I have two views each with a button that selects the other view.
I observe that this switching can be repeated, So I assume if you repeat this switching, more and more copies of the View are created and are shifted to the stack.
OK my conceptual problems are dissolving a bit. Thanks
You are using lower version than Xojo R2 then use “Dim” instead of “Var”.
If you do
Dim myView As New View1
You have an instance (loaded in memory) of View1 that is named myView. The scope (life time) of myView is the action event but a reference remains if you do
SomeViewInstance.PushTo(myView)
. It’s basicly stacked on top of SomeViewInstance. When in the myView code somewhere you call
Self.Close
the instance is removed from memory and becomes unloaded from memory.
It’s best to use the examples to learn. Also look on github for “iosdesignextentions” by @Jeremie Leroy which shows how declares work and also how to call views.
I can now change Views but still it seems that a reference to objects like buttons on these views are difficult. I think I have still conceptual problems.
So I have two views, View1 and View2. Both have a text-area (called ‘FromServerTA’) that I want the same information on that I get from a PageReceived event of httpsocket.
The code in the PageReceived is simply
Dim buffer As Text = TextEncoding.UTF8.ConvertDataToText(Content)
View1(currentview).FromServerTA.text= buffer
View2(currentview).FromServerTA.text= buffer
This generates only an error (during compilation) for the last line: Type View2,View2 has no member “FroServerTA.text”
No error for the identical line before where i would expect the same error for View1.
So I am still struggling with what the difference is between Views and Windows in the DT version.
One can refer to any object on any window from everywhere in DT XOJO.
I also tried to create instances of view and view2; so:
Var MyView1 as New View1
Var MyView2 as New View2
MyView1.FromServerTA.text= buffer
MyView2.FromServerTA.text= buffer
This gives no error but the textareas are not filled with buffer