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

时间:2011-04-01 20:47:34

标签: objective-c ios uiview uibutton drawrect

我目前正在开展一个项目,我有很多自定义表视图单元格。部分要求是,如果单元格的默认大小无法容纳所有内容,则单元格可以展开。如果他们需要能够扩展,我必须向单元格添加一个UIButton,当它被点击时,在一个更大的视图中重绘它,所有数据都适合。目前在绘制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];
}

这很好用,除了当我点击单元格中的任何其他位置时按钮闪烁并消失。有谁知道如何做到这一点?

1 个答案:

答案 0 :(得分:2)

来自UITableViewCell Class Reference

  

你有两种扩展方式   超出标准的UITableViewCell对象   给定的风格。使用创建单元格   多种,各种格式和   大小的字符串和图像的内容,   您可以获取单元格的内容视图   (通过其contentView属性)和   添加子视图。

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

[[self contentView] addSubview:self.accessoryButton];

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

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

然后,如果你的桌子大小总是相对较小(比如说< 50),你可以使用this方法,Jeremy Hunt Schoenherr建议。