Пользовательский класс UITableView Objective-C не загружается

#ios #iphone #objective-c #uitableview

#iOS #iPhone #objective-c #uitableview

Вопрос:

В XCode 5 я начал с примера панели вкладок и добавил UITableView в свой ViewController в раскадровке. Я хотел бы использовать пользовательский класс для этого UITableView, поэтому я добавил новый класс в свой проект и установил класс моего UITableView в качестве этого нового класса в раскадровке. Я также установил идентификатор ячейки. Проблема в том, что приложение по-прежнему использует класс UITableView по умолчанию. Не могли бы вы сказать мне, чего мне не хватает?

Вот мой пользовательский класс UITableView

 #import <UIKit/UIKit.h>
@interface CustomTableView : UITableView <UITableViewDelegate, UITableViewDataSource>
@end

@implementation CustomTableView

- (CustomTableView*) init {
  self = [super init];
  if (self) {
    self.delegate = self;
    self.dataSource = self;
    self.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    [self reloadData];
  }
  return self;
}

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

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

- (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
  return @"header title";
}

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString* staticCellIdentifier = @"customIdentifier";
  UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:staticCellIdentifier];
  if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:staticCellIdentifier];
  }
  cell.textLabel.text = @"cellTitle";
  return cell;
}
@end
  

Комментарии:

1. Используете ли вы Interface Builder? Вы также должны установить пользовательский класс там.

2. Вот что я имел в виду, говоря «установить класс моего UITableView таким новым классом в раскадровке». Извините за недоразумение

Ответ №1:

Вам необходимо реализовать initWithCoder: , какой из назначенных интерфейсов инициализатора использует конструктор.

Что-то вроде этого:

 - (CustomTableView*) initWithCoder:(NSCoder *)aDecoder{
  self = [super initWithCoder:(NSCoder *)aDecoder];
  if (self) {
    self.delegate = self;
    self.dataSource = self;
    self.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    [self reloadData];
  }
  return self;
}
  

Комментарии:

1. Я изменил это и заменил свой метод инициализации на ‘initWithCoder’, но это не помогло. У меня все еще есть TableView с нулевыми ячейками вместо 20.

2. Другое дело, что вы вызываете reloadData инициализатор. Вы вызываете его где-нибудь еще? Попробуйте добавить его в viewDidAppear: метод.

3. Что-то еще не так с вашим кодом. Я создал совершенно новый проект и вставил то, что у вас есть здесь, и он работает нормально. Вот ссылка на проект, который я сделал: cl.ly/3J0Z3j3k2f0o/download/Table.zip

4. Черт возьми, у меня была опечатка в имени моего класса. Ваш ответ был правильным. Большое спасибо!