I have a social app. I have a UIButton inside a TableViewCell. This button is called commentButton. What I want to achieve with this button is for the user to tap it and goto a tableview where the comments for that post are held. The issue is-----is that I am having a super hard time trying to pass the PFObjects at the current indexPath.row through a segue. I have tried multiple things. But let me help you get a better understanding of my problem.
As you can see above, it's the comment button that I am trying to initiate the segue on. commentButton has a tag of 222. I have tried changing the class of the button to a NSINTEGER:
cellForRowAtIndexPath
CommentButton *commentButton = (CommentButton*) [cell viewWithTag:222];
commentButton.index = indexPath.row;
[commentButton addTarget:self action:@selector(commentSegue) forControlEvents:UIControlEventTouchUpInside];
commentButton.showsTouchWhenHighlighted = YES;
Calling Segue @Selector
-(void) commentSegue
{
NSLog(@"Button TOUCHED!");
[self performSegueWithIdentifier:@"showcomments" sender:self];
}
Prepare for Segue
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"showcomments"])
{
CommentsViewController * cvc = segue.destinationViewController;
if([sender isKindOfClass:[CommentButton class]]){
CommentButton * button = sender;
_currentPost =[self.objects objectAtIndex:button.index];
cvc.postObject = _currentPost;
}
}
I have tried multiple things, this current code crashes with an unrecognized selector sent to instance error.
I have also tried:
if([segue.identifier isEqualToString:@"showcomments"]){
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
PFObject *currentObjects = [self.objects objectAtIndex:indexPath.row];
CommentsViewController * cvc = segue.destinationViewController;
NSLog(@"Segue Objects: %@", currentObjects);
cvc.postObject = currentObjects;
}
But when my tableView is populated my NSLog prints out the same data no matter what cell I choose. It's unable to differentiate which cell im choosing.
You are sending self
to performSegueWithIdentifier:sender:
. I'm assuming you mean to be sending your button as the sender? (You later try to cast sender
as a CommentButton
in prepareForSegue:sender:
) Try changing this:
-(void) commentSegue
{
NSLog(@"Button TOUCHED!");
[self performSegueWithIdentifier:@"showcomments" sender:self];
}
To this:
-(void) commentSegueWithButton:(CommentButton *)button
{
NSLog(@"Button TOUCHED!");
[self performSegueWithIdentifier:@"showcomments" sender:button];
}
Then you need to modify the following:
[commentButton addTarget:self action:@selector(commentSegue) forControlEvents:UIControlEventTouchUpInside];
To be this:
[commentButton addTarget:self action:@selector(commentSegueWithButton:) forControlEvents:UIControlEventTouchUpInside];
Also, while you are at it, create a breakpoint for All Exceptions if you don't have that already. That breakpoint will tell you at what line you are getting the unrecognized selector error.