видел похожие вопросы, но не смог найти однозначного ответа.
Освоив обычные таблицы большинства типов, я провожу некоторые концептуальные эксперименты с пользовательскими ячейками таблиц, чтобы ознакомиться с тем, как это работает.Я хочу иметь пользовательский подкласс UITableViewCell, который загружает перо в contentView.Возможно, я захочу реализовать разные стили редактирования в какой-то более поздний момент, но хочу повторно использовать пользовательское представление в разных частях моего приложения, однако у меня возникла проблема с получением сообщения didSelectRowAtIndexPath в моем вызывающем UITableViewController.
Вотиерархия, которая построена из базового шаблона представления.
CustomCellViewController: стандартный класс X-кода для цели c, выделенный из UITableViewCell
@interface CustomCellViewController : UITableViewCell {
IBOutlet UILabel *lbl;
}
@property (nonatomic, retain) IBOutlet UILabel *lbl;
@end
@implementation CustomCellViewController
@synthesize lbl;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
NSArray *a = [[NSBundle mainBundle] loadNibNamed:@"customCellView" owner:self options:nil];
UITableViewCell *tc = [a objectAtIndex:0];
NSLog(@"Cell loaded from nib");
[self.contentView addSubview:tc];
}
return self;
}
.. the other stock methods are unchanged ..
@end
Я понимаю, что метод init можно упростить, но это мойпервая попытка.
Владельцем файла XIB является мой пользовательский класс (CustomCellViewController), имеющий UITableViewCell и метку (связанную с выходом 'lbl' на нем), расположенную на полпути поперек, оставляя множество базовых UITableViewCell, доступных для нажатия.
RootViewController является стандартным стандартным подклассом XCode UITableViewController. RootViewController устанавливает переменную экземпляра "CustomTableCellController * myCustomCell"
cellForRowAtIndexPath: как указано нижеws:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"myCustomCell";
CustomCellViewController *cell = (CustomCellViewController *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[CustomCellViewController alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
NSLog(@"Creating New cell for position %d", indexPath.row);
} else {
NSLog(@"Reusing cell for position %d", indexPath.row);
}
// Configure the cell.
cell.lbl.text = [NSString stringWithFormat: @"Hi There %d", indexPath.row];
return cell;
}
И в том же RootViewController.m мой didSelectRowAtIndexPath:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Cell tapped at row %d", indexPath.row);
/*
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
*/
}
Разработан в настоящее время, чтобы просто выводить сообщение журнала при нажатии.
numberOfSectionsInTableView возвращает 1 numberOfRowsInSection возвращает 50
Все это компилируется и работает нормально, iPhone-симулятор запускается, я вижу таблицу на дисплее, мой выходной журнал подтверждает, что он создал 9 версий CustomCellViewController, и я могу видеть стек повторного использования черезNSLog () комментирует.
Я просто не могу выбрать строку, не имеет значения, где я щелкаю в пользовательской ячейке, ничего не попадает в мой didSelectRowAtIndexPath: в моем RootViewController, где я и ожидаю.
Неужели я где-то не назначил делегата, и если да, то как?Нужно ли делать это через первого респондента?(т.е. создайте метод в моем классе CustomCellViewController, свяжите UITableViewCell из XIB с этим методом и затем вызовите [super didSelectRowAtIndexPath] - но как мне передать indexPath?
Я не отвечаю на сообщение отмой XIB в его владельце, а затем передает его (это как я это делаю?)
Я прочитал все документы Apple, чтобы добраться до этого этапа, но не мог полностью понять, как происходил обмен сенсорными сообщениями.
Немного смущен!