Пользовательский делегат не работает (iPhone)

#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;