views:

223

answers:

2

Hello ! every one.

I have some query regarding tableViewCell.

Let me explain the situation.

There are many values added in an array for the table cells / rows.

Now, each cell has info button as static.

Each element of an array has dictionary and it has these two values = cellvalue & detail value.

Now, when user clicks on info button, the cell itself flip & display details of it.

See, we have utility application as an example of flip. but in utility application, entire view controller is been flipped.

I am trying my self. I have tried following code.

as an example of this flipping animation. (

  • open dash board
  • drag clock on screen
  • now see the clock, it has info button on it's bottom.
  • click on that button
  • clock will be flipped.
  • now click on done. it will be flipped again to original

I want to implement the same. & I have two many values for this. )

-(void)btnInfoTapped:(NSDictionary*)sender cellID:(NSString*)cellID{
    if(tmpVCtr!=nil && [tmpVCtr retainCount]>0){ [tmpVCtr release]; tmpVCtr=nil; }
    tmpVCtr=[[UIViewController alloc] init]; // temp view controller
    if(nxtEventInfoVCtr!=nil && [nxtEventInfoVCtr retainCount]>0){ [nxtEventInfoVCtr release]; nxtEventInfoVCtr=nil; }  // a view controller which is going to be flipped.
    nxtEventInfoVCtr=[[EventInfoVCtr alloc] initWithNibName:@"EventInfoVCtr" bundle:nil];
    nxtEventInfoVCtr.modalTransitionStyle=UIModalTransitionStyleFlipHorizontal;
    NSLog(@"%@",[sender description]);
    // here i am settings values for flipped view controller
if([sender valueForKey:@"pendingextratext"]){
    nxtEventInfoVCtr.strText=[sender valueForKey:@"pendingextratext"];
    nxtEventInfoVCtr.strTitle=[sender valueForKey:@"pendingdescription"];
    CustomCellPending *tmp=(CustomCellPending *)[tblMain dequeueReusableCellWithIdentifier:cellID];
    [tmpVCtr setView:[tmp backgroundView]];
    [tmpVCtr presentModalViewController:nxtEventInfoVCtr animated:YES];
} else {
    nxtEventInfoVCtr.strText=[sender valueForKey:@"payextratext"];
    nxtEventInfoVCtr.strTitle=[sender valueForKey:@"paydescription"];
    CustomCellPay *tmp=(CustomCellPay *)[tblMain dequeueReusableCellWithIdentifier:cellID];
    [tmpVCtr setView:[tmp backgroundView]];
    [tmpVCtr presentModalViewController:nxtEventInfoVCtr animated:YES];
}
     }

What I want is - "flip a view controller within a cell?"

Is it possible?

If someone know, please help.

Thanks in advance for sharing your knowledge.

Sagar.

A: 

Firstly, and it's probably just a personal taste, but your code is a bit untidy - there's nothing wrong with a few linebreaks you know ;)

About your problem, I would suggest you use two views within the cell - one will be the cell's default contentView, and the other a custom view that you create yourself.

Then you can write some code into your table view controller that will respond to the info button press. That method should decide which table cell it'll be flipping, using the indexpath, and then carry out the standard view flip using either core animation or a simplistic UIView animation with a flip transition.

It's important to know that each tableViewCell doesn't have a controller for itself by default (you can create one if you want), so when you're dealing with table view cells, most of the things you're interested in will be dealt with by the table view controller.

Things look up:

  • UIView animations
    • +beginAnimations:forContext:
    • +setAnimationTransition:forView:cache:
  • Custom Table Cell View's
    • How table cells are drawn
Jasarien
+1  A: 

I have added a view controller's view to cell view. Means

[cell addSubView:aVCtr.view];

Now, each of view controllers have two view with in it. View controller has button & on button tap event I am flipping the view.

See, the following code - is of a view controller & that view controller's view is added to a cell.

-(IBAction)btnInfoTapped:(id)sender{
    CGContextRef context = UIGraphicsGetCurrentContext();
    [UIView beginAnimations:nil context:context];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:viewMain cache:YES];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:1.0];
    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(hideMainView) userInfo:nil repeats:NO];
    [UIView commitAnimations];
}
-(void)hideMainView{
    [viewMain addSubview:viewInfo];
}

-(IBAction)btnBack:(id)sender{
    CGContextRef context = UIGraphicsGetCurrentContext();
    [UIView beginAnimations:nil context:context];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:viewMain cache:YES];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:1.0];
    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(hideInfoView) userInfo:nil repeats:NO];
    [UIView commitAnimations];
}

-(void)hideInfoView{
    [viewInfo removeFromSuperview];
}
sugar
In short - I have followed the way as @Jasarien said. It was his idea to use UIView animation.
sugar