Unwind segue for UITableViewController? - ios

I'm using a UITableViewController to show a list of items for editing. Once a row is tapped, it takes the user to a view controller to edit the data.
I want to use an unwind segue when they exit the edit screen via the default < (back) button, but I can't figure out how to connect it to Exit (to link the unwind segue) in the storyboard editor.
Can someone please tell me how to do this?
(I hope I don't have to create my own < (back) button.)

If you're passing data backwards - then use delegates. Otherwise just add a button yourself to the bar and connect it like any other UIBarButtonItem. Then add the unwise segue.
Personally, I'd use delegates for this situation.

Related

UINavigationController for infinite navigation (nested folders)

I need to navigate inside folders and files in directory (from server). The problem is that I don't know the number of folders so it's not possible to use performSegueWithIdentifier statically. How can I use navigation controller with dynamically number of view controllers in swift? I want to "push" a new view controller every time a user tap on a folder in order to list files/folders inside it and I want to do it with UINavigationController so the user have the possibility to go back with "previous" button.
Both storyboard and programmatically approaches are ok.
Thanks you
Storyboards and segues are just a crutch. Think about how you would do this without them. At each level, to go down a level, you would just instantiate a new view controller and push it onto the navigation controller stack with pushViewController:animated:.
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UINavigationController_Class/#//apple_ref/occ/instm/UINavigationController/pushViewController:animated:
And in fact it takes only one view controller class to do this, since any instance can create and push another instance of its own class. The display of one folder is exactly like the display of any other.
So if you wanted to configure this notion in a storyboard, you would have a circular segue, that is, the view controller would have a push / show segue leading to itself.
I agree with #matt's answer, just create the controller and push it. For sake of completeness, you can do this in a Storyboard with a segue.
Here's how:
So that you can call the segue programmatically, add an additional prototype cell to your tableView. (You do this because you don't want the segue to be automatically triggered when the tableViewCell is selected. By using an additional prototype cell, the segue can be wired up, but it will never be triggered automatically since this prototype cell will never actually be instantiated.)
Control-drag from this prototype cell to the viewController icon at the top of the tableViewController. Select "Show" from the pop-up.
Find this segue in the Document Outline View and give it an identifier such as "showFolderSegue" in the Attributes Inspector.
Now, when you want to trigger the segue, call: self.performSegueWithIdentifier("showFolderSegue", sender: self)
You can use prepareForSegue to set up the new tableViewController as you normally would.
This method too works with a single tableViewController.

How to link to another view of storyboard Xcode

I have a login system created. It uses a user ID instead of username and password. I want to make it so when the login button is pressed, it opens another view controller in my storyboard. I already have an if statement checking the user ID to see if it is correct. I just need to know the method to perform. I have tried a few, but I need more explanation of how to use them.
There are a couple of ways to do this. The first is to create a segue that directly links the login button to the new view controller. If you want to do this, right click drag (or control drag) from the button to the new view controller. This should make a grey line going from the first controller to the second one. You can then click on the little circle in the middle of the segue in interface builder to give it a name and specify the type.
Alternatively, if you created the login button with code, or would just like more control over your segues, you can create a generic segue in interface builder, meaning just control drag from one view controller to the other. If you do it this way, YOU MUST NAME THE SEGUE so you have a way to invoke it later. Then you just call [self performSegueWithIdentifier:#"nameOfYourSegue" sender:self]; to make the segue happen.
If you need to configure the new view controller at all or give it any data, this should happen in the prepareForSegue: method.
Here's a link to a nice tutorial on segues:
http://www.appcoda.com/storyboards-ios-tutorial-pass-data-between-view-controller-with-segue/

Custom View Controller display

I think this could be a simple question but I cannot seem to figure it out.
I have a screen which displays questions from an array. When the array has reached the end I want it to display another VC I have created. With all my other VC they are connected in the storyboard using segues between them. However, I only want this screen to display if I have reached the end of my array? Is what I am trying to doing making sense? Or does anyone know of any useful tutorials I could look at to figure it out for myself?
You can "manually" fire a seque with the performSegueWithIdentifier:sender: method using the segue identifier that you set on the segue in the storyboard. When you call that method the system sets up the right information and then executes prepareForSegue:sender: and then actually does the segue -- so the setup looks the same as an automatic segue trigger.
You can "manually" perform any segue with an identifier.
As to creating the segue to perform, you can create a segue from one View Controller to another in the storyboard (i.e. control-drag from the View Controller in the sidebar not from a button or a TableView cell or whatever). This sort of segue will have to be performed "manually".
Your call to do the "NextVCPlease" segue might look like:
if (lastQuestionDone) {
[self performSegueWithIdentifier:#"NextVCPlease" sender:whateverMakesSense]
}

Using Segue Manually

I need to create two Segue's from the same button, and then I want to programatically choice which one to use based on device orientation. The problem I'm having is that you can only seem to create one segue from a button to another view so when I add the second one it just changes the first.
How do you add a segue that either isn't linked to a button etc so I can do programatically or how are you supposed to do this. I want to have two views that get dynamically picked based on orientation rather than moving the objects based via code when rotated as there is alot of objects and custom stuff that would make it much simplier just to have two views.
You'd have to trigger the segue manually. Hook up the button to a method, then make two segues, one from each view controller to the other in your storyboard, then give it an identifier in IB, then in your method you can call "performSegueWithIdentifier:".
Additional Info
To make a manual segue, control-click from the view controller object in IB to another view controller and the box will pop up as "Manual Segue". Just make sure it has an identifier.
I would think you could have the button trigger an IBAction wherein you could make a choice based on orientation and then trigger the appropriate segue programmatically.

iOS: How to change a label with a next and a back button (DetailView)

I've got a Master-Detail Application and in my DetailView I have got a "back" and "next" button.
How the buttons should work:
If I click on the back/next button, the label (which comes from a TableView with SearchBar from the MasterView) should change to the previous/next entry of the TableView.
My problem is that I don't know how I can do that.
I searched in this forum and found this topic iOS: Button to access next Tableview cell, but I don't understand it (I am new in developing for iOS).
Can you help me please?
EDIT:
It is an iPhone App, with Storyboard and segue from MasterView to DetailView.
And it is a dynamic TableView.
The basic process is to make the class that can provide the data be a delegate of the one that needs it.
Create a new protocol.
Make the master controller implement the protocol.
Give the detail controller a property that refers to an object of
that protocol.
In prepareForSeque:, set the detail's delegate to the master
controller.
When the buttons are tapped, call your delegate for new data.

Resources