选中行时显示自定义UIView

时间:2014-02-05 19:54:16

标签: ios uitableview

我想知道是否可能以及如何实施以下用户操作:

用户点击一个在tableView行上显示为UIView的按钮。点击按钮后,应显示包含按钮的UIView,如下图所示:

enter image description here

更新的问题:

我改变了我的要求。从左到右翻转行后,应显示UIView。

我已将以下代码包含在我的cellForRowAtIndexPath方法中:

//swipe left-right
        UISwipeGestureRecognizer *swipeLeftRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleGestureLeftRight:)];
        [swipeLeftRight setDirection:(UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft )];
        [cell addGestureRecognizer:swipeLeftRight];
        //end of swipe left-right

我添加了handleGestureLeftRight方法:

-(void)handleGestureLeftRight:(UIGestureRecognizer *)gec
{
    {

        CGPoint p = [gec locationInView:self.tableView];

        NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p];


        if (gec.state == UIGestureRecognizerStateEnded) {


            NSLog(@"GESTURE LEFT-->RIGHT DONE");


            CGRect newSize = CGRectMake(0.0f ,0.0f, 150.f, 50.0f);
            UIView *newView = [[UIView alloc] initWithFrame:newSize];
            newView.backgroundColor = [UIColor redColor];


            UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            [button addTarget:self
                       action:@selector(aMethod:)
             forControlEvents:UIControlEventTouchDown];
            [button setTitle:@"Close" forState:UIControlStateNormal];
            button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
            [newView addSubview:button];
            [self.view addSubview:newView];


        }



    }
}

我希望它能按预期工作,现在我需要添加更多按钮并更改所有CGRectMake参数,以适应UIView中的所有按钮。

现在,我完成了这件事,我只会问你这个问题:

如何设置UIView坐标以使其像图片一样,这意味着就在所选行的上方?

1 个答案:

答案 0 :(得分:1)

1。您可以在屏幕上获取单元格的位置:

CGRect positionOnScreen = [tableView convertRect:self.frame toView:parentViewController.view];

其中self是UITableViewCell,parentViewController是包含该表的UIViewController。您需要在自定义单元格中执行此操作。然后,您可以将此值传递给您的父UIViewController。使用以下命令将弹出视图添加到UIViewController:

[myPopUpView setFrame: CGRectMake(myPopUpView.Frame.Origin.x , positionOnScreen.origin.y - myTableCell.Frame.Size.Heigh - myCustomCell.Frame.Size.Height, myPopUpView.Frame.Size.Width, myPopUpView.Frame.Size.Width)];
myPopUpView.Alpha = 1;

我假设您已经在.XIB中创建了弹出视图,Alpha属性等于0.

2。您可以通过隐藏弹出窗口来“关闭”弹出窗口:

myPopUpView.Alpha = 0;

您还可以使用addSubView:removeFromSuperview添加/删除弹出视图,而不是在.XIB中创建它并使用Alpha属性。