A UIButton "can" perform a segue without any code, but this will make life suck 
for you and confusion will be your best friend for a long time.

A UIButton should be declared as an "IBOutlet" property.  This essentially 
means nothing, but tells you, the developer, that this property is an Interface 
Builder Outlet.

Likewise, within the View Controller class that the button is defined within, 
there should be a method that the UIButton can call upon a certain event.  You 
probably want this event to be on the releasing of a finger on the button.  
Thankfully, since Xcode knows that you want to wire up an "action" (your 
method) to be performed on an IBOutlet that is a UIButton, it will expect that 
you will want to do it on the Touch Up Inside event that happens inside the 
button.  You can actually have a button respond to a Touch Up Outside, but I'm 
betting that's not what you want.

So, you'll need to define a method within your class that is an IBAction (also 
meaningless in code) so Xcode knows to wire a method that is an IBAction to an 
IBOutlet UIButton.  

This is how you do it in Xcode.
In your class's header file, in the @interface section, you'll need an IBOutlet 
property and an IBAction method.  Like so:

@property (nonatomic, weak) IBOutlet UIButton *thatButtonOfMine; 
// This is the reference to the button.  You'll have to connect it to your 
button's referencing outlet in the storyboard

- (IBAction)stuffToDo:(id)sender; 
// This is the method that can be called upon a button event.

So, you'll wire up the button by connecting the button in the storyboard (right 
click, son) to the little circle next to the IBOutlet property in your header 
file. (Or the other way around.)

But then you'll need to tell the stuffToDo method that it needs to be 
issued/called when the "touch up inside" condition happens on the button, so 
you can drag from your header file onto the button and Xcode will do it 
magically, or you can right click on the button, find Touch Up Inside and drag 
it onto the little circle next to the IBAction text in your header.

You may need to display the Assistant Editor to do this.

And finally, you'll actually have to add the method in your controllers .m 
file.  Just add it in the same way, sort of like so:

- (IBAction)stuffToDo:(id)sender
{
    // stuff you want to do goes here
}

Now, you probably want to issue a segue, that's my guess.

So, I'm sure you named all the segues you have from one class to another, so if 
by some magic, your segue is named "Next Screen", then you would have your view 
controller call that segue like so:

    [self performSegueWithIdentifier:@"Next Screen" sender:sender];

And you'd put it inside of - (IBAction)stuffToDo:(id)sender.

In this case, sender is the button itself, so if you really cared and wanted to 
go to different screens based on a property of the button you could totally do 
that.

That's pretty much it.

Cheers.
- Alex Zavatone





On Jun 25, 2014, at 5:44 PM, Rick Mann wrote:

> I added a UIButton to a UICollectionViewCell in IB, and then dragged a segue 
> from that to another scene. The problem I need to solve is for that 
> destination view controller to know which represented object was associated 
> with the cell in which the source UIButton was. But I can't see how to do 
> that.
> 
> One approach is to trigger the segue programmatically from the Cell subclass, 
> but you can't do that without knowing the view controller. How does the 
> button do it?
> 
> I can think of a few other approaches, but they're all kinda gross. Any 
> recommendations? I want to present a modal form sheet (iPad) when a button 
> inside the UICollectionViewCell is tapped without doing the normal segue that 
> happens when any other part of the cell is tapped (to allow the user to edit 
> metadata for that item without opening the full UI for that item).
> 
> TIA,
> 
> -- 
> Rick
> 
> 
> 
> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> 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:
> https://lists.apple.com/mailman/options/cocoa-dev/zav%40mac.com
> 
> This email sent to z...@mac.com

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to