Как правильно установить метку элемента пользовательского интерфейса в uitableview-iphone - PullRequest
0 голосов
/ 25 августа 2011

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
....
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

         UISwitch* testSwitch = [[UISwitch alloc] initWithFrame:
                                     CGRectMake(200, 
                                                0.5 * (cell.frame.size.height-30 ), 
                                                30, 30)];
        testSwitch.tag = 2;//If this is a dynamic value, it only works for 14 rows
        [cell.contentView addSubview:testSwitch];
        [testSwitch release];
}
    UISwitch *switch1 = (UISwitch*) [cell viewWithTag:2];
//cannot set a dynamic value here
        switch1.on = [<array value> boolValue];

Мне нужно, чтобы тег был динамическим значением в зависимости от данныхв текущей строке, чтобы я мог добавить метод действия при изменении значения и внести соответствующие изменения, связанные с моделью.Однако, поскольку тег установлен в первом разделе, если я сделаю это динамическим, будут установлены только 14 значений (количество строк, отображаемых на экране).Что мне делать, чтобы я мог сохранить динамическое значение во всех строках этого переключателя для его целевого метода действия для извлечения?

Спасибо ..

- Редактировать --- Изменен коддо

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

         UISwitch* testSwitch = [[UISwitch alloc] initWithFrame:
                                     CGRectMake(200, 
                                                0.5 * (cell.frame.size.height-30 ), 
                                                30, 30)];
        testSwitch.tag = indexPath.row;//If this is a dynamic value, it only works for 14 rows
        [cell.contentView addSubview:testSwitch];
        [testSwitch release];
}
    UISwitch *switch1 = (UISwitch*) [cell viewWithTag:indexPath.row];

    switch1.on = someboolValue; //CRASH as switch1 points to UItablviewcell and not UISwitch.

1 Ответ

1 голос
/ 25 августа 2011
testSwitch.tag=[indexPath row]

при условии, что у вас есть только один раздел.


хорошо, теперь звучит так, как будто у вас проблема в том, что [cell viewWithTag: indexPath.row]

находитсяячейка, а не ее подпредставление, при условии, что у вас есть только одно подпредставление uiswitch:

for (UIView *v in [cell subviews]) {
    if ([v isKindOfClass:[UISwitch class]]) {
        v.on = someboolValue;
    }
}
...