2013-07-26 4 views
1

Я делаю упражнение около tableView и tableViewCell. И у меня возникают проблемы с пользовательскими ячейками просмотра.No Visible View in Custom Table View Cell

Я создал свой собственный tableViewCell с .xib файлом, который называется newCellView.xib. Мне нужны файлы .h и .m, и я выбираю суперкласс как UITableViewCell.

На мой взгляд, контроллер называется TableViewController Я создавал таблицу с ячейками по умолчанию, как это.

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

    cell.textLabel.text = [showNames objectAtIndex:[indexPath row]]; 
    cell.imageView.image = [UIImage imageNamed:[iconArray objectAtIndex:[indexPath row]]]; 

return cell; 
} 

Как только я создал свой собственный пользовательский вид. Я импортировал newViewCell.h в мой viewController, и я обновил код следующим образом.

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

static NSString *newCellViewString = @"newCellView"; 

newCellView *cell = [tableView dequeueReusableCellWithIdentifier:newCellViewString]; 

//newCellView *cell = [[newCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:newCellView]; 
if (cell == nil) 
{ 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"newCellView" owner:self options:nil]; 
    cell = (newCellView *)[nib objectAtIndex:0]; 
} 

Но когда я запускаю приложение, я вижу пустую страницу, например, у меня нет соответствующего вида. Возможно, я забыл добавить некоторые добавления. Я даже не вижу пустые ячейки для просмотра. Только белая пустая страница. Любая помощь будет большой. Благодарю.

EDIT для других файлов

Вот мой .h и .m файлов.

#import <UIKit/UIKit.h> 

@interface newCellView : UITableViewCell <UITableViewDelegate> 

@property (nonatomic, strong) IBOutlet UILabel *nameLabel; 
@property (nonatomic, strong) IBOutlet UIImageView *iconImageView; 
@property (retain, nonatomic) IBOutlet UIButton *extendButton; 

@end 

.m файл

#import "newCellView.h" 

@implementation newCellView 

@synthesize nameLabel; 
@synthesize extendButton; 
@synthesize iconImageView; 

- (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 
} 

- (void)dealloc { 
[extendButton release]; 
[nameLabel release]; 
[iconImageView release]; 
[super dealloc]; 
} 
@end 
+0

Кажется, что ваш табличный обзор находится за некоторым источником данных проверки данных, а также – amar

+0

ли вы создаете объект для просмотра лабиринтов и изображений и связали его с newViewCell в вашем newViewCell.xib? – KDeogharkar

+0

, так что я должен сделать, чтобы это увидеть? Настройка этого представления как root? – erenkabakci

ответ

0

Я нашел ответ. В моем коде все было хорошо, кроме позиционирования сотового представления.

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

Спасибо за внимание.

0

Это простая ошибка я столкнулся раньше. Вы забыли придумать. он должен быть:

cell = (newCellView*)[nib objectAtIndex:0]; 

Если это не помогает решить проблему убедитесь, что ваш файл XIB установлен использовать класс «newCellView», а не класс по умолчанию «UITableViewCell». Кроме того, если вы создали табличное представление вручную и добавили его в качестве подсмотра другого представления или задали его как ваш вид в методе loadView или аналогичном, а не подклассифицировали UITableViewController, убедитесь, что вы установили кадр для представления таблицы и добавили его как подвью.

Возможно, вы захотите удалить из класса newCellView.h. Делегат для представления таблицы не должен быть представлением или подклассом одного. Особенно это не та ячейка, которая будет отображаться в таблице. UITableViewController должен получать методы делегата.

+0

На самом деле это было так, как прежде, чем я забыл изменить снова. спасибо, но все еще не работает. – erenkabakci

+0

Как установить кадр как подпункт? – erenkabakci

+0

Я не уверен, что вы имеете в виду. Вы имеете в виду, как вы устанавливаете Frame? вам нужно будет только, если вы вручную создали экземпляр tableView. Если вы это сделали, вы можете установить фрейм, используя [tableview setFrame: [UIScreen mainScreen] .bounds]; – ksealey

4

При работе с пользовательской ячейкой я всегда пытаюсь инкапсулировать все, что связано с ячейкой в ​​подклассе UITableViewCell (включая NIB/outlets/..), и использовать метод tableView registerClass: forCellReuseIdentifier:, чтобы сообщить моей таблице, какой класс использовать для его ячеек.

В вашем примере, чтобы сделать, чтобы вы могли:

В вашем newCellView.m добавить загрузку острия в сотовом INIT:

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
if (self) { 
    // Initialization code 
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"newCellView" owner:self options:nil]; 
    self = [nib objectAtIndex:0]; 

} 
return self; 
} 

Убедитесь, что все Розетки соединения выполнены правильно. (т. е. ваш UITableViewCell в вашем Nib имеет класс NewCellView, ..)

Тогда в viewDidLoad вашего контроллера вы сообщите таблицу использовать newCellView для своих клеток:

[yourTableView registerClass:[newCellView class] forCellReuseIdentifier:@"newCellView"]; 

Наконец в cellForRowAtIndexpath:

newCellView *cell = [tableView dequeueReusableCellWithIdentifier:@"newCellView"]; 

if (cell == nil) 
{ 
    cell = [[NewCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"newCellView]"; 
} 
+0

Это работает! Не нужна часть if (cell == nil), поскольку мы уже используем registerClass –

2

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

Создать EMPTY NIB файл, без содержания. Затем добавьте uitablecustomcell через объекты, и когда вы добавляете новый объект, GO TOFile Inspector и в имени файла введите имя newCellView. Теперь пользовательские ячейки будут отображать EMPTY строк.

Теперь добавьте несколько представлений в пользовательскую ячейку и присоедините эти виды через IBOutlets, созданный в .h файлах, а именно nameLabel, iconImageView, extendButton.