Мой UIImageView не получает все методы моего подкласса UIImageView - PullRequest
0 голосов
/ 27 января 2010

Я создал подкласс (называемый MyPicture) UIImageView с помощью следующих методов:

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        self.userInteractionEnabled = YES;
    }
    return self;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"-- I AM TOUCHED --");
}

// ...

Когда я создаю UIImageView с InterfaceBuilder с классом MyPicture, все работает, и консоль пишет: «Я ТРОЕН» Но только когда я активирую взаимодействие с пользователем, включенное в IB.

Но когда я создаю UIImageView программно, он работает. в ViewController.h:

MyButton * foo;

В ViewController.m:

- (void)viewDidLoad {
    flo = [[UIImageView alloc]initWithFrame:CGRectMake(0.0, 45.0, 324, 52.0)];
    foo.userInteractionEnabled = YES;
    foo.image = [UIImage imageNamed:@"Picture 1.png"];
    [self.view addSubview:foo];
    [super viewDidLoad];
}

Я вижу изображение, поэтому оно должно быть моим подклассом UIImageView. Но почему он не обнаруживает прикосновения?

Ответы [ 2 ]

4 голосов
/ 27 января 2010

Я не понимаю, почему это должен быть ваш подкласс. Видеть изображение просто означает, что это UIImageView. Что именно, что это такое (не подкласс) Здесь:

foo = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 45.0, 324, 52.0)];

вы инициализируете UIImageView, а не свой подкласс. Попробуйте изменить эту строку на:

foo = [[MyPicture alloc] initWithFrame:CGRectMake(0.0, 45.0, 324, 52.0)];

Edit: Кроме того, так как вы установили userInteractionEnabled = YES в методе initWithFrame: 'вашего подкласса, нет причин, по которым вам придется делать это снова в этой строке:

foo.userInteractionEnabled = YES;
1 голос
/ 27 января 2010

Когда вы создаете подкласс UIImageView, есть пара различных способов, которыми приложение может вызвать объект к существованию. UIImageViews, созданные в Интерфейсном Разработчике, предварительно скомпилированы и загружены в память без вызова метода -(id)init. Вместо этого они вызывают - (void)awakeFromNib после загрузки содержимого пера в память.

Убедитесь, что для идентификатора вашего класса задан ваш подкласс, и установите userInteractionEnabled в методе awakeFromNib вашего подкласса. Это позволит вам установить взаимодействие с пользователем без привязки.

Чтобы полностью загрузить UIImageView программно, убедитесь, что вы выделяете из правильного класса. Ваш код вызывался из суперкласса UIImageView.

- (void)viewDidLoad {
    foo = [[MyImageView alloc] initWithFrame:CGRectMake(0.0, 45.0, 324, 52.0)];
    foo.image = [UIImage imageNamed:@"Picture 1.png"];
    [self.view addSubview:foo];
    [super viewDidLoad];
}

Это вызовет - (id)initWithFrame из вашего подкласса вместо суперкласса и выполнит ваш собственный код. Это также отправляет вызовы - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event вашему подклассу, а не суперклассу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...