单击单元格按钮时如何显示视图

Posted

技术标签:

【中文标题】单击单元格按钮时如何显示视图【英文标题】:How to display a View when i click on a cell button 【发布时间】:2015-03-24 10:11:23 【问题描述】:

我有一个 UITableView。其中大约有 5 个单元格/行。

每个单元格中都有一个按钮。当用户单击按钮时,我需要在其顶部显示动画视图。 (这个视图应该是动画并从底部显示)

    根据我的代码,视图不会显示。我该如何解决这个问题? 我需要知道如何显示从底部开始动画的视图? 我需要视图的大小来获取表格单元格的确切大小。我该怎么做?

我的代码: cellForRowAtIndexPath

[cell.button addTarget:self action:@selector(buttonclick:) forControlEvents:UIControlEventTouchUpInside];


- (void) buttonclick:(id) sender 

    NewView *newView = [[NewView alloc] init];

    newView.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2);

    [self.view addSubview: newView];

在自定义视图类中

-(id)initWithFrame:(CGRect)frame    
    self = [super initWithFrame:frame];
    if (self) 

        [[NSBundle mainBundle] loadNibNamed:@"myview" owner:self options:nil];

        self.bounds=self.myview.bounds;

        [self addSubview:self. myview];

    

    return self;


【问题讨论】:

你添加了这个:cell.userInteractionEnabled = NO; 不,我没有。按钮被点击,按钮点击事件被触发。 请不要简单地使用引用格式来突出显示文本,这会让人感到困惑。至于问题,您的初始化代码不清楚,有一个我们不知道的属性myview的引用,它与第一个旅游问题有关,请提供更多细节以使其清楚。至于自定义动画和尺寸计算,展示您已经为使其工作所做的工作可能是一个好主意。 为什么这篇文章被否决了? 【参考方案1】:

全部解决

- (void) buttonclick:(id) sender 

    UITableViewCell *cell=(UITableViewCell *)[sender superview];


    NewView *newView = [[NewView alloc] initWithFrame:cell.bounds];

    [self.view addSubview: newView];

    //Position the view to the bottom of the view.
    CGRect rect=newView.frame;
    rect.origin.y=self.view.frame.size.height;
    newView.frame=rect;


    //New Position of y to animate from bottom

    rect.origin.y=rect.origin.y-rect.size.height;
    [UIView animateWithDuration:.2 animations:^
        newView.frame=rect;
    ];

   

您的代码有误。

你没有调用 initWithFrame 因为你在那里加载 nib,所以它永远不会被调用。

更新

您在自定义类代码中遗漏了一个关键点

self.myview=[[[NSBundle mainBundle] loadNibNamed:@"myview" owner:self options:nil] lastObject];

希望对你有帮助。

干杯。

【讨论】:

仍然没有显示。有什么线索吗? NewView 中是否有任何实现?您能否检查您的代码是否在 initWithFrame: 中被调用并且您的 myview.bounds 值是否正确?【参考方案2】:

如果 NewView 是重新实现 drawRect 的自定义 UIView,那么您需要调用 setNeedsDisplay

看到这个answer

【讨论】:

【参考方案3】:
    - (void) buttonclick:(id) sender 
    
        UIButton *button = (UIButton *) sender;
        UIView *senderSuperView = [button superView];// access cell

        NewView *newView = [[NewView alloc] init];

       [newView setFrame: senderSuperView.frame];

       CGAffineTransform newViewActualTransform = newView.transform;

       newView.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2);

       [self.view addSubview: newView];

       newView.transform = CGAffineTransformScale(newViewActualTransform, 0.0, 0.0);

       [UIView animateWithDuration:1.0f
                             delay:0
                           options:UIViewAnimationOptionCurveEaseOut
                        animations:^
        newView.transform = CGAffineTransformScale(newViewActualTransform, 1.0, 1.0);
    
completion:^(BOOL finished)

    
    ];

【讨论】:

以上是关于单击单元格按钮时如何显示视图的主要内容,如果未能解决你的问题,请参考以下文章

使用显示/减少按钮展开/折叠表格视图单元格

如何在单击按钮时将 ImageView 添加到表格单元格中?

在 ios 中展开和折叠表格视图单元格

按下单元格中的按钮时显示新视图

单击时突出显示表格视图单元格

如何在单击按钮时获取表格视图单元格中文本字段的值?