Re: Passing data through a segue
Re: Passing data through a segue
- Subject: Re: Passing data through a segue
- From: Roland King <email@hidden>
- Date: Mon, 02 Apr 2012 19:23:19 +0800
What's your trigger for the segue? Have you set it up in IB so that a select on the table cell triggers it automagically?
If so then no you have probably lost control of didSelect...
So you have two choices. Either do the second thing I said, find the sending tableViewController, get its selected index path in the prepareForSegue: call and then get your object there, or don't bind the segue direct to the tableview, just make a segue (named) between the two view controllers. Nothing will trigger that, only segues starting from user interface elements like buttons trigger theselves. (to do this I usually drag from the UIVC yellow box icon to the second VC). You should then get your didSelect,... call and you can call the performSegue: yourself.
There's probably about another 4 ways to skin that particular cat, I've found storyboards and segues to be quite flexible, so flexible sometimes they just fall off!
On Apr 2, 2012, at 7:15 PM, Rick Mann wrote:
> Thanks for the quick response.
>
> I think I'm okay with sending stuff through the sender parameter, although I do agree it's a bit ugly.
>
> Problem is, my didSelectRowAtIndexPath isn't getting called... :-( The delegate is set correctly, so I'm assuming iOS doesn't call it in the presence of segues? It IS calling prepareSegue...
>
> --
> Rick
>
> On Apr 2, 2012, at 4:10 , Roland King wrote:
>
>> in -didSelectRowAtIndexPath you get the object then you call performSegue:withIdentifer:sender with the object you just got as the sender.
>>
>> in -prepareForSegue you have the destination view controller from the segue object and you have the 'object' you used as sender, the object from your table. Set that object into your destination view controller and you are done.
>>
>> Sender is a bit of a bad choice for that parameter I think, you can see why it's called that because in the case of a normal button type segue it is the button you pressed so it's a sender, but if you use performSegue:: yourself you can send anything you like and pick it back up in the prepareForSegue method.
>>
>> I suppose alternatively you could use the master table as your 'sender', get the indexPathForSelectedRow and use the master table's datasource to look that up in the prepareForSegue method, but .. why bother, it's so easy the other way.
>>
>> On Apr 2, 2012, at 6:57 PM, Rick Mann wrote:
>>
>>> I have a simple storyboard app with a push segue from a master table to a detail controller. In the past, I'd implement -didSelectRowAtIndexPath, get the object for that row, create the detail view controller, assign the object to it, and push it.
>>>
>>> Now I don't really see a nice way to do that without an ivar in the master view controller. I can either override prepareForSegue, in which case I won't have the index path available, or call performSegue, in which case I won't have the destination view controller available.
>>>
>>> Am I missing something, or must I store the object in an ivar in one, and get at it in the other?
>>>
>>> TIA,
>>> Rick
>>>
>>>
>>> _______________________________________________
>>>
>>> Cocoa-dev mailing list (email@hidden)
>>>
>>> Please do not post admin requests or moderator comments to the list.
>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>>
>>> Help/Unsubscribe/Update your Subscription:
>>>
>>> This email sent to email@hidden
>>
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden