Динамическое добавление кнопок в uitableviewcell - приложение для iPhone - PullRequest
5 голосов
/ 11 октября 2009

У меня есть приложение для спряжения глаголов, которое отображает переводы глаголов в первой ячейке таблицы. В настоящее время список перевода - это просто строка (список, разделенный запятыми), но я бы хотел изменить его, чтобы на нем можно было нажимать кнопки. У меня была попытка добавить кнопки в представление ячеек без особого успеха, но мой единственный опыт работы с пользовательскими ячейками заключался в использовании определенного позиционирования, поэтому я не уверен, как получить динамический список кнопок (различной ширины) внутри ячейки.

Любая помощь с благодарностью.

Приветствие.

Ответы [ 4 ]

4 голосов
/ 12 октября 2009

делать следующее

-(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]
}

Вам придется позаботиться о ширине, высоте и т. Д. При динамическом создании кнопок.

4 голосов
/ 16 июня 2010

Я только что сделал это для своего нового приложения для 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];    

Приветствие.

3 голосов
/ 11 октября 2009

Сделать объект UIView. Установите ваши UIButton объекты как подпредставления этого родительского представления.

Получив это, вы можете добавить это родительское представление к свойству contentView ячейки.

В методе делегата -tableView:cellForRowAtIndexPath: вы должны сгенерировать родительское представление (а также количество и тип кнопок внутри) на основе некоторого условного состояния, прежде чем добавлять его в contentView.

ячейки.

Что касается выполнения этого программно, как только некоторые условия меняются, запустите [tableView reloadData] или аналогичные методы, чтобы обновить представление таблицы и ее ячейки.

0 голосов
/ 12 июня 2014

Вы можете сделать это внутри функции cellForRowAtIndexPath viewcontroller:

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")
}
...