Отправка значений ячеек в cellForRowAtIndexPath при нажатии кнопки - PullRequest
1 голос
/ 27 сентября 2010

Я столкнулся с проблемой при добавлении кнопки в ячейку моего табличного представления.

Позвольте мне объяснить, после того как я добавил код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";

RadioCustomCell * cell = (RadioCustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[RadioCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        [cell setChannelImage:[UIImage imageNamed:@"p4.png"]];

        UILabel *nowTitle = [UILabel alloc];
        nowTitle.text = @"In My Heart";
        [cell setNowTitle:nowTitle];

        UILabel *nowArtist = [UILabel alloc];
        nowArtist.text = @"Moby";
        [cell setNowArtist:nowArtist];

        UILabel *nextTitle = [UILabel alloc];
        nextTitle.text = @"Only Girl (In The World)";
        [cell setNextTitle:nextTitle];

        UILabel *nextArtist = [UILabel alloc];
        nextArtist.text = @"Rihanna";
        [cell setNextArtist:nextArtist];

        // My button right here
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(6 ,31, 110, 20);
        [button setImage:[UIImage imageNamed:@"radionorge.png"] forState:UIControlStateNormal];
        [button addTarget:self action:@selector(touched:) forControlEvents:UIControlEventTouchUpInside];

        [cell.backView addSubview:button];

    }
    return cell;
}

И "коснулся" -функция для действия для кнопки.

-(void)touched:(id)Sender {

    // Here i want to get the UILabels for each cell. Such as nowArtist.

}

Видите ли, я хочу получить UILabel-тексты для каждой ячейки в функции касания.Я знаю, что вы должны использовать отправителя в качестве указателя каким-то образом, но я не знаю, как.

Ответы [ 4 ]

0 голосов
/ 03 июля 2014

Есть еще один метод, с которым большинство из нас не знакомо, и я думаю, что он очень полезен.Проверьте ниже.

- (void)touched:(id)sender {
    UIButton *btn = (UIButton *)sender;
    NSIndexPath *indexpath = [self.tableview indexPathForRowAtPoint:btn.center];
    RadioCustomCell *currentCell = (RadioCustomCell *)[tableview cellForRowAtIndexPath:indexpath]
    UILabel *titleLabel = (UILabel *)[currentCell viewWithTag:YourTag];
}
0 голосов
/ 27 сентября 2010

Во-первых, вы захотите установить свойство тега для каждой метки. Использование #define или const - хорошая идея, но для простоты я собираюсь предположить, что вы будете использовать 1, 2, 3 и 4 для каждой UILabel в порядке их появления в коде.

Вот как должен выглядеть ваш код действия. (Возможно, вам придется немного его настроить.)

-(void)touched:(id)Sender {
    // Here i want to get the UILabels for each cell. Such as nowArtist.
    if ([sender isKindOfClass:[UIButton class]]) {
        UIButton *button = (UIButton *)sender;
        UIView *contentView = button.superview;
        UIView *viewWithTag1 = [contentView viewWithTag:1];
        if ([viewWithTag1 isKindOfClass:[UILabel class]]) {
             UILabel *titleLabel = (UILabel *)viewWithTag1;
             // You now have the title label.
        }
        // Repeat the above for each tag.
}

Одно наблюдение: в вашем коде много объектов. Вам не нужно выделять кучу новых меток каждый раз, когда вы обновляете ячейку. Просто используйте что-то вроде:

cell.nowTitle.text = @"In My Heart";
0 голосов
/ 27 сентября 2010

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

  1. Добавление UiButton в качестве дополнительного представления к ячейке внутри cellForRowAtIndexPath UIButton * button = [[[UIButton alloc] initWithFrame: CGRectZero] autorelease]; // Вы можете указать изображение для кнопки здесь. [ячейка addSubview: кнопка]; cell.accessoryView = button;
  2. Я надеюсь, что вы не жестко программируете все Artist и Titles .. Допустим, вы используете Array. На ощупь событие любой ячейки. в методе UITableView didSelectRowAtIndexPath Вы получите номер строки ... используйте его, чтобы получить текст метки из массива.
0 голосов
/ 27 сентября 2010

У UIButton есть свойство, называемое «тег», его назначение именно то, что оно используется для идентификации кнопки, попробуйте установить значение, которое поможет вам найти необходимое, установив индекс в свойстве тега.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...