在TableCell中翻转 - 就像实用程序应用程序一样

时间:2010-02-08 09:03:38

标签: iphone xcode uitableview uiviewcontroller uinavigationcontroller

我对tableViewCell有一些疑问。

表格单元格/行的数组中添加了许多值。现在,每个单元格的信息按钮都是静态的。数组的每个元素都有字典,它有两个值,cellvaluedetail值。

现在,当用户点击信息按钮时,单元格本身会翻转并显示它的详细信息。

请参阅,我们将实用程序应用程序作为翻转示例,但在实用程序中,整个视图控制器已被翻转。

我尝试过以下代码。

作为这个翻转动画的一个例子:

  • 打开仪表板
  • 在屏幕上拖动时钟
  • 现在看时钟,它的底部有信息按钮。
  • 点击该按钮
  • 时钟将被翻转。
  • 现在点击完成。它将再次翻转为原始

我想实现相同的功能,我有两个很多值。

-(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];
}
     }

我想要的是翻转单元格内的视图控制器。有可能吗?

2 个答案:

答案 0 :(得分:2)

首先,它可能只是个人品味,但你的代码有点凌乱 - 你知道的一些换行没有错;)

关于你的问题,我建议你在单元格中使用两个视图 - 一个是单元格的默认contentView,另一个是你自己创建的自定义视图。

然后你可以在你的表视图控制器中编写一些代码来响应按下信息按钮。该方法应该使用索引路径决定它将翻转哪个表格单元格,然后使用核心动画或带有翻转过渡的简单UIView动画执行标准视图翻转。

重要的是要知道每个tableViewCell默认情况下没有自己的控制器(你可以根据需要创建一个控制器),所以当你处理表格视图单元格时,大部分事情你都是感兴趣的将由表视图控制器处理。

事情抬头了:

  • UIView动画
    • +beginAnimations:forContext:
    • +setAnimationTransition:forView:cache:
  • 自定义表单元格视图
    • 如何绘制表格单元格

答案 1 :(得分:1)

我已将视图控制器的视图添加到单元格视图中。 装置

[cell addSubView:aVCtr.view];

现在,每个视图控制器都有两个视图。 视图控制器有按钮&按钮点击事件我正在翻转视图。

请参阅以下代码 - 视图控制器&视图控制器的视图被添加到单元格中。

-(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];
}