What's best way to display default view for 'No internet connection' each time navigate to any of view controllers? - ios

If inserting the snippet code for checking and displaying the default view in the case of no internect connect at the beginning of viewWillAppear: method of each view controllers, it would make the ton of boilerplate code. So, I'd like to ask:
Is there a way to centralize this snippet code in one place and automatically inject into any of view controllers right after be called to display.
In the case of no internet connection, how to display the default view instead of the view of view controller?

First you have a to create a seperate view for 'No Internet screen'.
Create a BaseViewController in which, you will add a logic of hide/show no internet screen.
And all your apps viewcontroller are derived from this 'BaseViewController' and initialize this 'No Internet screen' and hide/show depends of internet Or API fails
Thats it.

Simple make a BaseViewController in which you implement the code to show or not the NoInternetConnection message.
It can be a simple UILabel that you add on top of other views.
Then inherit this class when you create a view controller that needs this common behavior.

You could create a placeholder view for no net connection state,
and you should think about easy to use for you and others, that's all.
There is a demo for you:https://github.com/liaodalin19903/LMLNonetAnimationPlaceholderView
You can learn how to create a better more no net connection placeholder VIEW

Related

How to create simple tableview and load data using Swift in iOS

I am trying to create an app for iOS using Swift but running into problems with the very basics.
To keep it simple I just want the app to initially be a single view application with a button and some sort of list view on the page. I believe a TableView is what is recommended here. When I click the button, I just want it to populate the list/table view with some entries, that's it. To start with, I don't care if these entries are hard-coded, I just want to get something working.
I have been looking at different samples but I am getting confused. Some of them seem to suggest using a TableViewController others don't. When I use a tableview controller, the UI I had created seems to get completely replaced with just an empty tableview list and the button is gone.
I previously have developed apps in Windows phone and found it a lot easier. I'd just add a listview object and in the click method of button, add the items programmatically etc. But this is my first time trying to create an iOS app and it seems a lot more confusing. There are delegates, controllers, views all seemingly needed in order to do something very simple.
Can anyone give me some basic step by step instructions about how to add a tableview to an application and load some data into it through a button click?
Make sure you are clear about the difference between a view and a view controller.
iOS uses the MVC design pattern (Model View Controller).
A view object displays contents to the user and responds to user interaction.
A model object stores state data.
A controller object drives the app logic and mediates between the model and the view.
A UITableViewController is a special subclass of a UIViewController who's job is to manage a table view. It has some extra support in it that makes it a good choice for managing a table view, BUT... there is one annoying thing about it. It is designed so the ONLY view it can manage is a table view. You can't use a UITableViewController if you want to add buttons, labels, and other UI elements to your screen outside of the table view.
What I usually do is to create a create a table view controller, create a separate regular view controller, add a container view to the regular view controller, and then use an embed segue to embed the table view controller inside the view controller. (you just control-drag from the container view to the table view controller.) That way you get the best of both worlds. You may want to create a protocol that the table view controller would use to communicate with it's parent view controller.
You should be able to find a tutorial online on setting up a table view controller as a child of another view controller using container views and embed segues. It's quite easy.

Control vars/IBOutlets from one ViewController in another ViewController

I'm new to Swift, so I apologize for my lack of knowledge of almost anything related to Swift.
Right now, I'm developing an app that uses the ARSlidingPanel library, so now there are two ViewControllers present on the screen (Main view, with the dark background, and Panel view, which is the green background). I want to be able to set vars/call functions from the Panel view to the Main view. For example if I click a button in the panel view, I want to display some text in the main view. Right now I've started with using static vars but from my knowledge of Java/Android, I know this is probably not the right way to go. Any tips for a cleaner/more acceptable way of doing things?
There are a few different options here. However, the first thing that comes up to mind is if you really need to use two independent view controllers for the same view?.
One solution would be to use delegates. Write a swift protocol that has has the methods and functionality you want to expose, for example setting up values in the view controller's outlets, then implement the protocol in one view controller. In your other view controller, you can then create a delegate variable of type UIViewController -let delegate: UIViewController - and use that instance of your delegate to modify the view. Here's a guide on this
Even better, you can add view controllers as sub view controllers
of your view, apple provides a good bit of documentation on this, you
can find it
here.
Hope this helps.

How can I link an outlet from a view controller to an other?

I am working on an app that uses parse so I used the "starter project" as a base and worked from there.
The issue I am facing is that the ViewController is controlling the login screen a well as others such as the tableView and mapView witch I added later.
As this is the case if it would be possible I would link the map outlet by simply dragging from the code to the map but obviously this is not possible, How could I solve this problem (I understand I may be looking at the problem the wrong way but any help would be appreciated)
here is the code with the map outlet
here is what the layout looks like
The MVC model, Model-View-Controller model, isn't intended to have an action in one view touch the controller of another view. In InterfaceBuilder, you should only ever be able to attach actions to the controller for that specific view.
In general, if you set the file owner to ViewController, then you can only link IBoutlets to that view controller not make to another one.
your map is available in your MapViewController not ViewController, so you need to give the reference/IBoutlet of map need to assign the MapViewController, if you want to implement in ViewController, you need to create new one map
No you have to create different file for each controller.
you cant add outlet of all in one controller

iOS: Container View Controller Pattern

I'm having a bit of trouble wrapping my head around the way a container view controller is meant to be implemented.
I dragged a container into my main view controller and it automatically creates the embedded view controller and is connected via an embed segue. I can then access it from my main view controller via prepareForSegue.
I'm a bit confused as to creating and using these on the fly. Ie say I want to use it as an alert view. Am I meant to just initialize the view once, and then change its contents each time the display is meant to be triggered? Should I be calling presentViewController or just setting hidden/animating the view in and out?
Having trouble articulating. Hopefully someone speaks newb and can understand me.
Using an embedded controller that you get with a container view is not a good fit for something like an alert. You can't create these "on the fly" this way, since that embedded controller is instantiated at the same time as the controller it's contained in (you don't president it). You can do the same thing in code as what a container view gives you using the custom container controller procedures (see Apple's "Creating Custom Container View Controllers" document). If you just want to make a custom alert view like view, I would just create a custom view and add it as a subview to your controller.
Use setHidden: method when you want to show or hide that view.
[_myAlertView setHidden:YES];
[_myAlertView setHidden:NO];
I hope that I understood your question correctly.

One Common View In Every ViewController

I am having a hard time wording this when searching the internet so I am just going to ask the question.
I have an options view in my app that slides into view when the user clicks a button. This options view will display app information like settings. I want this options view to be displayed on every view controller in my app. I do not want to copy and paste the code for the options view into every viewcontroller file. The options view has quite a few outlets and actions and also calls many delegates.
How can I reuse this options view in all my view controllers without adding all the outlets, actions, and delegate methods each time?
I was going to make a new file with public methods, but I would still have to copy the outlets. Would this public methods file have to include delegate methods as well then?
Let me know if my question does not make sense. I am hoping there is a standard way of implementing something like this.
You can just have the options view be the view of an options view controller, and show it modally from any view controller you want. Is there some reason you're not doing it this way? This is the usual way to do this, not by having a view that you reuse in different controllers.
Add the options as a subview of the window, then make your App Delegate handle all of the options view's outlets

Resources