动态添加按钮到uitableviewcell - iPhone应用程序

时间:2009-10-11 11:14:30

标签: iphone dynamic uitableview variables uibutton

我有一个动词结合应用程序,它在表格的第一个单元格中显示动词翻译。目前翻译列表只是一个字符串(逗号分隔列表),但我想将其更改为具有可点击按钮。我在单元视图中添加按钮没有太大的成功,但是我对自定义单元的唯一体验是使用特定的定位,所以我不确定如何在单元格内实现动态按钮列表(不同的宽度)。

非常感谢任何帮助。

干杯。

4 个答案:

答案 0 :(得分:4)

请执行以下操作

-(CGRect)placeAButton:(NSString*)textFromField withCell:(UITableViewCell*)cell
{
    CGSize      theSize;
    CGSize      constraintSize;

    // Create a button and add as subview to cell
    // Get coordinates to place the button

    UIButton *button    = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];

    button.titleLabel.font              = [UIFont systemFontOfSize:MEDIUM_FONT_SIZE];;
    button.titleLabel.lineBreakMode     = UILineBreakModeTailTruncation;
    button.contentVerticalAlignment     = UIControlContentVerticalAlignmentCenter;
    button.contentHorizontalAlignment   = UIControlContentHorizontalAlignmentCenter;

    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [button setTitle:textFromField forState:UIControlStateNormal];

    UIImage *buttonBkground;
    buttonBkground = [UIImage imageNamed:@"blueButton.png"];
    UIImage *newImage = [buttonBkground stretchableImageWithLeftCapWidth:12.0 topCapHeight:0.0];
    [button setBackgroundImage:newImage forState:UIControlStateNormal];
    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:button];

[self.tableView reloadData]
}

在动态创建按钮时,您必须注意单元格宽度,高度等。

答案 1 :(得分:4)

我刚刚为我的新iPad应用做了这个,所以我想我会粘贴代码。

// NOTE - This is within a loop     
// Add the translation as a button
    UIButton *translationButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
    translationButton.backgroundColor = [UIColor clearColor];
    translationButton.titleLabel.font = [UIFont boldSystemFontOfSize:16];
    [translationButton setTitle:translation forState:UIControlStateNormal];
    [translationButton addTarget:self action:@selector(translationSearch:) forControlEvents:UIControlEventTouchUpInside];
    // Work out required size
    fontSize = [translationButton.titleLabel.text sizeWithFont:translationButton.titleLabel.font];      
    CGRect buttonFrame = CGRectMake(xOffset, 15, fontSize.width + 20.0, 24);
    [translationButton setFrame:buttonFrame];

    // Now set the new x Offset
    xOffset = buttonFrame.origin.x + buttonFrame.size.width + 6.0;

    [verbView addSubview:translationButton];    

干杯。

答案 2 :(得分:3)

制作一个UIView对象。将UIButton个对象设置为此父视图的子视图。

完成后,您可以将此父视图添加到单元格的contentView属性中。

-tableView:cellForRowAtIndexPath:委托方法中,在将其添加到单元格的contentView之前,您将基于某些条件状态生成父视图(以及内部按钮的数量和类型)。

至于以编程方式执行此操作,只要某些条件发生更改,请运行[tableView reloadData]或类似方法来刷新表视图及其单元格。

答案 3 :(得分:0)

您可以在viewcontroller cellForRowAtIndexPath函数中执行此操作:

var btn = UIButton(frame: CGRectMake(100, 100, 100, 20));
    btn.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal);
    btn.setTitle("My Button", forState:UIControlState.Normal);
    btn.addTarget(self, action: "buttonTapped:", forControlEvents: UIControlEvents.TouchUpInside);

    //add the buttons to the cell
    cell.contentView.addSubview(btn)

在同一个类中添加另一个函数,该函数将接收按钮点击事件

func buttonTapped(sender: UIButton!)
{
    println("Button Tapped")
}