2015-01-11 3 views
0

Привет, я новичок IOS, пытающийся работать с табличным представлением с подробным приложением. Я использую совершенно новый macbook air и Xcode 6. Тем не менее, я постоянно замечаю, что вещи, необъяснимо исчезающие или неправильные в показе сборки. Я пробовал очистить безрезультатно.Почему элементы перестают отображаться без видимых причин?

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

Единственное, что я сделал, это отдельный контроллер детали, добавлен свойство вывода изображения и другое свойство, ни одно из которых не выдает предупреждение, но почему это испортило сцену tableviewcontroller?

Вот код для таблицы, которая работала, но теперь не отображается подтекст или изображения, хотя он отображает голову:

static NSString *protoCell = @"Cell"; 
- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:protoCell forIndexPath:indexPath]; 

    // Configure the cell... 
    cell.textLabel.text = @"head"; 
    cell.detailTextLabel.text = @"sub"; 

    cell.imageView.image = [UIImage imageNamed:@"pic.png"]; 
    UIImageView *rightimage; 
    rightimage = [[UIImageView alloc] initWithFrame:CGRectMake(225.0,0.0,80.0,45.0)]; 
    rightimage.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight; 
    [cell.contentView addSubview:rightimage]; 
    rightimage.image = [UIImage imageNamed:@"pic.png"]; 

    CGSize itemSize = CGSizeMake(40, 40); 
    UIGraphicsBeginImageContextWithOptions(itemSize, NO, UIScreen.mainScreen.scale); 
    CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height); 
    [cell.imageView.image drawInRect:imageRect]; 
    cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    cell.imageView.layer.masksToBounds=YES; 
    cell.imageView.layer.cornerRadius=20.0; 
    cell.imageView.frame = CGRectMake(20, 20, 500, 50); 

    return cell; 
} 
+1

«Вот код для таблицы, который работал, но теперь не отображает подтекст или изображения, хотя он отображает заголовок« Так что отлаживайте его. Перед тем, как внести это изменение, верните проект обратно в исходное состояние. Или закомментируйте новый код, пока не выясните, какая разница вызывает проблему. – matt

+2

Вы когда-нибудь удаляли «правомерность» из содержимого вашей ячейки? Если нет, вы будете добавлять другой из них каждый раз, когда ячейка повторно используется. Я не уверен, что это имеет какое-то отношение к вашей проблеме, но это потенциальная ошибка и потенциальная утечка памяти. –

+0

Не говорите «без видимых причин».Существует ясная и простая причина. Это просто не очевидно для вас. – matt

ответ

2

Ваш код имеет много проблем. Главное, что вы забываете о повторном использовании ячеек. Вы говорите

[cell.contentView addSubview:rightimage]; 

для каждый зову cellForRowAtIndexPath:. Но это называется много раз для той же ячейки, потому что ячейки повторно используются. Поэтому, если у вас есть 100 строк в таблице, вы можете получить 100 (или 1000 или 10000) копий rightImage в той же ячейке.

Кроме того, вы говорите, это:

cell.textLabel.text = @"head"; 
cell.detailTextLabel.text = @"sub"; 
[cell.contentView addSubview:rightimage]; // ??? 

Вы не должны быть смешивания встроенных textLabel и detailTextLabel с вашими собственными дополнительными подвидов.

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

О, и еще одно. Вы говорите:

Я продолжаю замечать вещи необъяснимо исчезают или происходит неправильно в показе сборки

No. Стоп. Вещи необъяснимо бывают. Вы не научитесь программировать, если вы подозреваете таинственные силы прокрадываться и испортить вещи, как космические лучи. Если ваш код ломается, вы сломал его. Научитесь смотреть на то, что, если ваш код не ведет себя так, как вы ожидаете, вы что-то не так. Вы никогда не станете хорошим программистом, если вы не согласитесь с этим способом мышления.

Смежные вопросы