2010-09-24 3 views
0

Я поставил DragView (подкласс UIView) на UITableViewCell с тегом (строка + 20000)что максимальное ограничение просмотра тега на UITableViewCell

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

    NSInteger row=[indexPath row]; 
    NSInteger section=[indexPath section]; 
    static NSString *SimpleTableIdentifier1 = @"CellTableIdentifier"; 
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier: SimpleTableIdentifier1 ]; 
    if (cell == nil) { 
     cell=[[[UITableViewCell alloc] initWithFrame:CGRectZero 
     CGRect dragRect =CGRectMake(12.0f,6.0f,24.0f,24.0f); 
     DragView *dragger =[[DragView alloc] initWithFrame:dragRect]; 
     [dragger setTag: row+20000 ]; 

    } 
    DragView *newDragger=(DragView*)[cell viewWithTag: row+20000 ];//error 

    //...... 
    return cell; 
} 

Но когда я пытаюсь использовать коды (строки метки с «ошибкой») для доступа к DragView, отладчик показывает, что newDragger возвращает 0x0, что означает отсутствие объекта.

Я не знаю, где не так. Я просто думаю, что может быть причина ограничения суммы максимической метки)

Приветствую любой комментарий.

Благодаря

InterDev

ответ

1

тег свойство имеет тип NSInteger и может иметь любое значение NSInteger может содержать, так 20000 не должно вызывать проблем.

Код, который вы отправили, определенно не содержит каких-либо деталей - вы на самом деле положили в свою камеру драглера? Следует также отметить, что рекомендуется не добавлять подвидов в UITableViewCell непосредственно - вы должны добавить их в contentView клетки вместо:

[cell.contentView addSubView: dragger]; 

и доступ к нему позже:

DragView *newDragger=(DragView*)[cell.contentView viewWithTag: row+20000 ]; 

отметить также, что ваш код не будет работать когда таблица повторно использует ячейки, то есть когда ячейка используется для строки, отличной от строки, изначально созданной для нее, и в любом случае вы попытаетесь получить доступ к subview с неправильным тегом.

P.S. Также см. Этот вопрос Detecting which UIButton was pressed in a UITableView. Это касается кнопок, но может быть, это будет полезно и для вашего пользовательского представления.

0

Клетка может быть вызвана методом dequeueReusableCellWithIdentifier: и предыдущим номером этой ячейки может быть кто-то другой. Таким образом, тегу нельзя доверять.