Я пытаюсь добавить пользовательский делегат в мой собственный UITableViewCell.
В этой ячейке у меня есть кнопка, которая должна вызвать метод в ViewController, где расположен UITableView.
Я делаю все обычные шаги, чтобы добавить пользовательский делегат, но по какой-то причине, когда я открываю VC во время выполнения, приложение вылетает и выдает ошибку неверного доступа.
Когда я комментирую всекод делегата работает правильно, поэтому я предполагаю, что что-то не так, когда я добавляю делегата.Когда я оставляю свое свойство id незакомментированным, оно кажется сбойным.
Я реализую протокол в VC.Я назначил делегата ячейке в cellForRowAtIndexPath :.Все методы делегата на месте.Я использовал подобные конструкции в других классах, но никогда ранее не был в подклассе UITableViewCells.
Прежде чем публиковать некоторый код, я хотел бы знать, сталкивался ли кто-то с этой ошибкой раньше.Если и как он решил это, или если вообще возможно создать пользовательский делегат для подкласса UITableViewCell.
РЕДАКТИРОВАТЬ:
My customCell.h
#import <UIKit/UIKit.h>
@class MyTableViewCell;
@protocol MyTableCellProtocoll <NSObject>
-(void) didPressButton:(MyTableViewCell *)theCell;
@end
@interface MyTableViewCell : UITableViewCell
{
UIButton *myButton;
id<MyTableCellProtocoll> delegationListener;
}
@property (nonatomic,retain) UIButton *myButton;
@property (nonatomic,assign) id<MyTableCellProtocoll> delegationListener;
- (void) buttonAction;
@end
.m
#import "MyTableViewCell.h"
@implementation MyTableViewCell
@synthesize myButton;
@synthesize delegationListener;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
self.myButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.myButton.backgroundColor = [UIColor clearColor];
self.myButton.frame = CGRectMake(5, 0, 10, 32);
self.myButton.titleLabel.adjustsFontSizeToFitWidth = YES;
[self.myButton addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:self.myButton];
}
return self;
}
- (void) buttonAction
{
NSLog(@"buttonpressed");
[self.delegationListener didPressButton:self];
}
@end
MyVC реализует делегат как соответствующий в .h
@interface MyVC : UIViewController <UITableViewDelegate, UITableViewDataSource, MyTableCellProtocoll>
, а также использует один метод делегата из MyTableCellProtocoll в .m
- (void)didPressButton:(MyTableViewCell *)theCell
{
NSLog(@"didPressButton");
}
Я назначаю делегата в cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.delegationListener = self;
}
return cell;
}
Это все местоположения, которые я использую для делегата.Я хочу, чтобы он изменил название кнопки и вставил несколько строк после этой ячейки (измененные дубликаты)
Надеюсь, это прояснит ситуацию немного больше.
EDIT2: метод кнопки не вызывается при запуске, как было упомянуто в разделе комментариев.Отредактированный код с лог-кодом.
EDIT3: С кнопкой все в порядке.Это свойство делегата, которое где-то испорчено.С помощью точек останова, журналов и комментариев я убедился в этом.
Код выполняется до последнего элемента в моем списке источников данных, а затем происходит сбой.Я полагаю, что на 1 шаг ближе к проблеме.
ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Хорошо, похоже, что все делегаты, кнопки и другие компоненты вообще не были проблемой.Это была высота ForRowAtIndexPath: меня обманывают.В любом случае, спасибо за вашу поддержку!