получить идентификатор таблицы строк, когда я нажму на переключатель? - PullRequest
4 голосов
/ 09 декабря 2010

У меня есть табличное представление с переключателем управления.Моя проблема: как я могу получить идентификатор таблицы строк, когда я нажимаю на переключатель?Я могу получить состояние переключателя, но не идентификатор

. Это мой код для получения состояния переключателя:

- (void)aggiungiTag:(id)sender {    
    NSLog(@"the tag value is: %d", [sender isOn]);
    return;
}

. Это мой код для управления переключением в ячейке:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    // Configure the cell...
    //inseriamo nelle celle la nostra lista
    cell.textLabel.text = [arrTagResidui objectAtIndex:indexPath.row];

    /*** aggiungo lo switch per i tag ***/
    //lo istanzio e setto la posizione
    UISwitch *switchObj = [[UISwitch alloc] initWithFrame:CGRectMake(1.0, 1.0, 20.0, 20.0)];
    //setto il valore di default
    switchObj.on = NO;
    //setto l'action ed i controlli degli eventi
    [switchObj addTarget:self action:@selector(aggiungiTag:) forControlEvents:(UIControlEventValueChanged | UIControlEventTouchDragInside)];
    //aggiungo lo switch alle celle
    cell.accessoryView = switchObj;

    NSInteger row = indexPath.row;
    [arrBoolSwitch insertObject:[NSNumber numberWithBool:NO] atIndex:row]; 
    [switchObj release];
    return cell;
}

Ответы [ 3 ]

2 голосов
/ 09 декабря 2010

Все зависит от вашей таблицы, кода и т. Д. И т. Д. ... но если вы просто ищете строку, одним из вариантов может быть установка атрибута tag UISwitch на indexPath.row(или какое-то значение, где вы можете вычислить это).Что-то вроде:

[switchObj setTag:indexPath.row];

Тогда у вас будет идентификатор строки в вашем методе:

- (void)aggiungiTag:(id)sender {    
    NSLog(@"the tag value is: %d, row is %d", [sender isOn], [sender tag]);
    return;
}

Все зависит от конечной цели и того, что делает остальная часть приложения -но это дешево и просто.

2 голосов
/ 09 декабря 2010

Просто настройте ваш обработчик событий, чтобы принять параметр события:

- (void)aggiungiTag:(id)sender forEvent:(UIEvent*)event {    
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:
     [[[event touchesForView:sender] anyObject] locationInView:self.tableView]];
    // do stuff with indexPath
}

Не забудьте также изменить подпись в вашем @selector:

[switchObj addTarget:self 
              action:@selector(aggiungiTag::) // <-- two colons now :)
    forControlEvents:(UIControlEventValueChanged | UIControlEventTouchDragInside)];
0 голосов
/ 10 декабря 2010

Это решение, которое побежало!;)

- (void)aggiungiTag:(id)sender {    

    //recupero l'oggetto switch di cui ho bisgno
    UISwitch *theSwitch = (UISwitch *)sender;

    //recupero la cella della tabella sulla quale è posizionato lo switch
    UITableViewCell *cell = (UITableViewCell *)theSwitch.superview;
    UITableView *tableView = (UITableView *)cell.superview;
    NSIndexPath *indexPath = [tableView indexPathForCell:cell];

    NSLog(@"the row is: %d", indexPath.row);
    NSLog(@"the tag value is: %d", [theSwitch isOn])
}

Спасибо за все!

...