#iphone #delegates
#iPhone #делегаты
Вопрос:
У меня есть пользовательский подкласс UITableViewCell, для которого я хочу создать делегат. Это .h подкласса UITableViewCell:
#import <UIKit/UIKit.h>
@class InfoTableViewCell;
@protocol InfoTableViewCellDelegate <NSObject>;
@optional
- (void)setTitle:(NSString *)title;
@end
@interface InfoTableViewCell : UITableViewCell <UITextFieldDelegate> {
UITextField *textField;
NSNumber *objectId;
NSNumber *cellId;
NSNumber *isName;
}
@property (nonatomic, retain) UITextField *textField;
@property (nonatomic, retain) NSNumber *objectId;
@property (nonatomic, retain) NSNumber *cellId;
@property (nonatomic, retain) NSNumber *isName;
@end
Однако приложение выходит из строя, и в нем говорится, что нет метода с именем setDelegate: когда я вызываю [cell setDelegate:self]; в моем подклассе UIViewController, который инициализирует ячейку. Что я делаю не так?
Комментарии:
1. Может быть почтовый индекс, в котором вы создаете и инициализируете свою ячейку?
Ответ №1:
Вам нужно создать свойство делегата, соответствующее протоколу, например, вот так:
#import <UIKit/UIKit.h>
@class InfoTableViewCell;
@protocol InfoTableViewCellDelegate <NSObject>;
@optional
- (void)setTitle:(NSString *)title;
@end
@interface InfoTableViewCell : UITableViewCell <UITextFieldDelegate> {
id <InfoTableViewCellDelegate> delegate;
UITextField *textField;
NSNumber *objectId;
NSNumber *cellId;
NSNumber *isName;
}
@property (nonatomic, retain) UITextField *textField;
@property (nonatomic, retain) NSNumber *objectId;
@property (nonatomic, retain) NSNumber *cellId;
@property (nonatomic, retain) NSNumber *isName;
@property (nonatomic, assign) id <InfoTableViewCellDelegate> delegate;
@end
Не забудьте синтезировать.
Ответ №2:
Что ж, вам нужно создать delegate
атрибут и задать свойство.
id <InfoTableViewCellDelegate> delegate;
//...
@property (nonatomic, assign) id <InfoTableViewCellDelegate> delegate;
Ответ №3:
разве у UITableView нет делегата, а не UITableViewCell?
Ответ №4:
Трудно сказать без дополнительного контекста, но, похоже, вы хотите делать это вместо этого:
textField.delegate = cell;