#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. Черт возьми, у меня была опечатка в имени моего класса. Ваш ответ был правильным. Большое спасибо!