iPhone - Добавление кнопки в выбранную строку в UITableView - PullRequest
1 голос
/ 26 мая 2011

Я использую шаблон приложения XCode для навигации, чтобы создать приложение, основанное на UITableView.


Когда пользователь выбирает строку в UITableView, я хочу отобразить кнопку внутри этой выбранной ячейки. Я хочу, чтобы эта кнопка отображалась только в выбранной ячейке, а не в других ячейках. То же самое происходит, если пользователь выбирает другую ячейку впоследствии.


Как мне это сделать? Возможно ли это?

Ответы [ 4 ]

3 голосов
/ 26 мая 2011

Подкласс UITableViewCell и добавьте кнопку к нему.

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
        button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
        [button setFrame:CGRectMake(320.0 - 90.0, 6.0, 80.0, 30.0)]; 
        [button setTitle:@"Done" forState:UIControlStateNormal];
        button.hidden = YES;
        [self.contentView addSubview:button];
    }
    return self;
}

Затем переопределить setSelected следующим образом:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
    self.button.hidden = !selected;
}
1 голос
/ 26 мая 2011

Это должно быть возможно, используя что-то вроде следующего:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (lastClickedCell != nil) {
        // need to remove button from contentView;
        NSArray *subviews = lastClickedCell.contentView.subviews;
        for (UIButton *button in subviews) {
            [button removeFromSuperview];
        }
    }
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    // this gives you a reference to the cell you wish to change;
    UIButton *cellButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // you can change the type to whatever you want
    [cellButton setFrame:CGRectMake(x, y, w, h)]; // you will need to set the x,y,w,h values to what you want
    // if you want the button to do something, you will need the next line;
    [cellButton addTarget:self action:@selector(someMethod) forControlEvents:UIControlEventTouchUpInside];
    // now you will need to place the button in your cell;
    [cell.contentView addSubview:cellButton];
    [tableView reloadData];  // this updates the table view so it shows the button;
    lastClickedCell = cell;  // keeps track of the cell to remove the button later;
}

РЕДАКТИРОВАТЬ: вам, конечно, нужно будет удалить кнопку из contentView, когда вы выбираете новую ячейку, поэтому вам понадобится немного логики для этого. Создание подклассов может быть более простым решением, но этот путь вам нужно выбрать, если вы не хотите создавать подклассы. Например, вы хотите объявить следующее в своем заголовке.

UITableViewCell *lastClickedCell;

Тогда вы захотите включить это в вышеприведенное (которое я изменю, чтобы вставить его);

0 голосов
/ 25 августа 2011

ЭТО ПРОСТОЕ РЕШЕНИЕ!

  1. Создайте свою кнопку где-нибудь наподобие функции viewDidLoad (убедитесь, что она объявлена ​​в файле .h, чтобы вы могли ссылаться на нее из любого места)

  2. в - (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath

добавить следующее:

  if (yourButton)
            [yourButton removeFromSuperview];

        [[tableView cellForRowAtIndexPath:indexPath] addSubview:yourButton];
        [yourButton setSelected:NO]; 
        [yourButton setHighlighted:NO];
0 голосов
/ 26 мая 2011

Проверяли ли вы developer.apple.com документацию по UITableViewController и UIButton?

...