单击单元格按钮时如何显示视图
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)
];
【讨论】:
以上是关于单击单元格按钮时如何显示视图的主要内容,如果未能解决你的问题,请参考以下文章