2014-01-29 2 views
0

Я пытаюсь создать и использовать пользовательскую ячейку UITableView в своем представлении таблицы, но это действует на фанк. Когда я запускаю приложение таблица выглядит следующим образом:Пользовательский UITableViewCell отображается некорректно

enter image description here

Это правильно. Однако, когда я выбираю ячейку, вид переходит к следующему:

enter image description here

Насколько я могу судить, это, кажется, после выбора ячейки, что вид клеток переходит к компоновке UITableViewCell по умолчанию с моим изображением звезды за ним ... Если я продолжу, чтобы выбрать каждую клетку я получаю это:

enter image description here

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

Я прошел через Apple's tutorial при попытке сделать пользовательскую ячейку, так что я знаю, что я делаю все, что я должен, но никто на StackOverflow не была аналогичная проблема ...

Вот код для моего проекта. Заголовок

// 
// TableViewController.h 
// CustomCell 
// 
// Created by Jordan Gardner on 1/29/14. 
// Copyright (c) 2014 Jordan Gardner. All rights reserved. 
// 

#import <UIKit/UIKit.h> 

@interface TableViewController : UITableViewController 

@end 

TableView контроллер Реализация

// 
// TableViewController.m 
// CustomCell 
// 
// Created by Jordan Gardner on 1/29/14. 
// Copyright (c) 2014 Jordan Gardner. All rights reserved. 
// 

#import "TableViewController.h" 
#import "CustomCell.h" 

@interface TableViewController() 

@end 

@implementation TableViewController 

#pragma mark - Table view methods 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 5; 
} 

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

    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 

    // Configure cell... 
    cell.textLabel.text = [NSString stringWithFormat:@"Item %@", [NSNumber numberWithInteger:indexPath.row]]; 
    cell.imageView.image = [UIImage imageNamed:@"icon_folder.png"]; 

    return cell; 
} 

@end 

CustomCell Header реализация

// 
// CustomCell.h 
// CustomCell 
// 
// Created by Jordan Gardner on 1/29/14. 
// Copyright (c) 2014 Jordan Gardner. All rights reserved. 
// 

#import <UIKit/UIKit.h> 

@interface CustomCell : UITableViewCell 

@property (weak, nonatomic) IBOutlet UIImageView *imageView; 
@property (weak, nonatomic) IBOutlet UIButton *favoriteButton; 
@property (weak, nonatomic) IBOutlet UILabel *textLabel; 

@end 

CustomCell

TableView Контроллер

// 
// CustomCell.m 
// CustomCell 
// 
// Created by Jordan Gardner on 1/29/14. 
// Copyright (c) 2014 Jordan Gardner. All rights reserved. 
// 

#import "CustomCell.h" 

@implementation CustomCell 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

@end 

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

+2

Я предлагаю вам разные имена для ваших элементов в пользовательской ячейке, вместо использования стандартных 'textLabel' и' imageView'. Время от времени они конфликтуют. – n00bProgrammer

+0

И деньги идут на @ n00bProgrammer – ngoue

+0

@ n00bProgrammer может быть прав, я бы сначала сменил textLabel на что-то еще. Во-вторых, вы используете автозапуск? Если да, проверьте, что у вас нет двусмысленного макета. – ansible

ответ

0

Как уже упоминалось в комментариях вопрос по @ n00bProgrammer, я использовал имена, как textLabel и imageView, которые конфликтуют со значениями по умолчанию, и, следовательно, вызывают вопросы.

-1
  • макет обычай ячейки на вашем UITableView
  • выберите пользовательскую ячейку и выберите инспектор, удостоверяющий личность. Добавьте собственный класс UitableViewCell для новой ячейки.
  • Выберите инспектор атрибутов и добавьте уникальный идентификатор в соответствии с вашим кодом.
  • Установить соединения с элементами управления на ячейке в пользовательский класс.
  • При загрузке таблицы просмотра обращайтесь к элементам управления на пользовательской ячейке ниже.

    MSCMoreOptionTableViewCell *cell = (MSCMoreOptionTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"cell"]; 
    
    
    if (cell == nil){ 
        cell = [[MSCMoreOptionTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault 
                 reuseIdentifier:@"cell"]; 
    } 
    
    
    cell.label_whatever.text = @"whatever"; 
    
+0

Я ценю усилия, но вы, возможно, слишком быстро прочитали вопрос ... Я все это уже делал. – ngoue

0

Вот решение .Все что вам нужно сделать, это добавить следующий код в cellForRowAtIndexPath.

cell.contentView.frame = cell.bounds 
cell.contentView.autoresizingMask = [.FlexibleLeftMargin, 
            .FlexibleWidth, 
            .FlexibleRightMargin, 
            .FlexibleTopMargin, 
            .FlexibleHeight, 
            .FlexibleBottomMargin] 
+0

Как упоминалось в комментариях к вопросу, @ n00bProgrammer правильно указал, что я использовал имена по умолчанию - 'textLabel' и' imageView' - что вызывало необычное поведение. – ngoue

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