Objective c 将按钮(UIButton)添加到使用drawRect绘制的自定义tableview单元格:

Objective c 将按钮(UIButton)添加到使用drawRect绘制的自定义tableview单元格:,objective-c,ios,uiview,uibutton,drawrect,Objective C,Ios,Uiview,Uibutton,Drawrect,我目前正在做一个项目,我有很多自定义的表视图单元格。部分要求是,如果单元格的默认大小不能容纳所有内容,则可以扩展单元格。如果他们需要能够扩展,我必须在单元格中添加一个UIButton,当点击它时,在一个更大的视图中重新绘制它,所有的数据都适合。目前在draw rect中,我基本上是这样做的: if([self needsExpansion]) { [self addExpansionButton]; } -(void)addExpansionButton { self.acc

我目前正在做一个项目,我有很多自定义的表视图单元格。部分要求是,如果单元格的默认大小不能容纳所有内容,则可以扩展单元格。如果他们需要能够扩展,我必须在单元格中添加一个UIButton,当点击它时,在一个更大的视图中重新绘制它,所有的数据都适合。目前在draw rect中,我基本上是这样做的:

if([self needsExpansion]) {
    [self addExpansionButton];
}

-(void)addExpansionButton {

    self.accessoryButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.accessoryButton setShowsTouchWhenHighlighted:YES];
UIImage *buttonImage = [UIImage imageNamed:@"blue_arrow_collaps_icon.png"];
[self.accessoryButton setFrame:CGRectMake(280, 82, buttonImage.size.width, buttonImage.size.height)];
[self.accessoryButton setImage:buttonImage forState:UIControlStateNormal];
[self.accessoryButton addTarget:self action:@selector(toggleExpanded) forControlEvents:UIControlEventTouchUpInside];    
[self addSubview:self.accessoryButton];
}
这很好,除了当我点击单元格中的其他任何地方时,按钮会闪烁并消失。有人知道如何正确地做到这一点吗?

来自:

有两种方法可以扩展 标准UITableViewCell对象超出 给定的样式。使用创建单元格的步骤 多个、不同格式和 为内容调整字符串和图像的大小, 您可以获取单元格的内容视图 (通过其contentView属性)和 向其中添加子视图

不应将附件按钮添加为UITableViewCell的子视图,而应将其添加为contentView的子视图:

[[self contentView] addSubview:self.accessoryButton];
您在设计方法中解决了以下问题吗?:假设您的一个单元(我们称之为A)确定它需要扩展,因此您在其中添加了一个按钮。当用户在UITableView中滚动时会发生什么?出于性能原因,UITableView委托应在tableView:cellForRowAtIndexPath:中使用dequeueReusableCellWithIdentifier。因此,您将重用A来显示表的另一行。你真的想要一个附件按钮吗?可能不是,因为它现在代表一个不同的对象

您最好在UITextViewDelegate上进行单元格自定义。在tableView:cellForRowAtIndexPath:中,可以确定在指定行显示的对象是否需要按钮,以及是否将其作为子视图添加到contentView

再说一次,如果您的表大小总是相对较小(比如<50),您可以使用Jeremy Hunt Schoenherr建议的方法