2

Когда я добавляю подкласс UIImageView за весь набор подклассов UIButton, эти кнопки перестают получать штрихи и больше не работают. Ничто из того, что я пробовал, не помогло восстановить их связь с пользовательскими касаниями.Подкласс подкласса UIImageView не передает касания к подчиненным контроллерам

Я пробовал:
а) Использование UIImageView подкласса для переднего обзора (который получает штрихи) и убедившись, что setUserInteractionEnabled ДА. Результат: UIButtons не отвечает, если присутствует UIView.

b) Явно передаю прикосновения с лицевой стороны на контроллер вида в надежде, что он пойдет правильно. Результат: UIButtons не реагируют на касания.

с) Вызов методов touchesBegan, touchesMoved и touchesEnded непосредственно на кнопку Я хочу, чтобы взаимодействовать с тем, когда любое прикосновение на передней UIView принимается. Результат: Поразительно кнопки не реагируют даже тогда, когда я запихиваю события касания вниз по их горлу.

d) Передача штрихов с лицевой стороны на UIViewController и итерация по всем подземельям вручную. Я включил метод touchesBegan, показывающий, как я пытался это сделать. При выполнении цикл бесконечен, он никогда не продвигается мимо первого представления (имеет тип FrameUIView).

Я знаю, что эта проблема, вероятно, является результатом моего недостатка в понимании правильной иерархии взглядов или цепи ответчиков.

Если я прокомментирую последнее представление, созданное после кнопки, то кнопки работают нормально. Есть ли что-то особенное в отношении UIButtons?

Вот код.

У меня есть подкласс UIViewController, в нем:

- (void)loadView { 

     mainAppView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     self.view = mainAppView; 

     frameImageView = [[FrameUIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     frameImageView.image = [UIImage imageNamed:[[[ThemeController sharedInstance] currentTheme] frameImageFilename]]; 
     [frameImageView setUserInteractionEnabled:YES]; 
     [mainAppView addSubview:frameImageView]; 

     zoomInButton = [[CustomUIButton alloc] initWithFrame:CGRectMake(controlsOriginX + zoomWidth + lightWidth, controlsOriginY, zoomWidth, controlsHeight)]; 
    [zoomInButton setTitle:@"+" forState:UIControlStateNormal]; 
    [[zoomInButton titleLabel] setFont:[UIFont systemFontOfSize:28]]; 
    [zoomInButton addTarget:self action:@selector(doMyAction) forControlEvents:UIControlEventTouchDown]; 
    [zoomInButton addTarget:self action:@selector(cancelMyAction) forControlEvents:UIControlEventTouchUpInside]; 
    [mainAppView addSubview:zoomInButton]; 


     FrameFrontUIView *frameFrontImageView = [[FrameFrontUIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     frameFrontImageView.image = [UIImage imageNamed:[[[ThemeController sharedInstance] currentTheme] frameFrontImageFilename]]; 
     [frameFrontImageView setUserInteractionEnabled:YES]; 
    [mainAppView addSubview:frameFrontImageView]; 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    for (UIView *view in self.view.subviews) { 
     NSLog(@"view is a %@", [view description]); 
     [view touchesBegan:touches withEvent:event]; 
    } 
} 

Любой с наконечником о том, как это сделать, выигрывает в интернетах и ​​печенье. Также принимает револьверы для румынской рулетки. Спасибо.

ответ

0

Вы пробовали использовать кнопки без изображения позади них? Подкласс UIButton не рекомендуется. Способ создания экземпляра UIButtons является фабричными методами:

UIButton* myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

Так я думаю, что CustomUIButton экземпляров, которые вы создали не правильно настроены.

+0

Его определенно хорошая догадка. Я подклассифицировал UIButton для решения проблемы, а именно, что я хочу иметь возможность устанавливать альфа ТОЛЬКО фонового изображения, а не метки или остальной части кнопки.Я достиг этого, создав подклассическую кнопку, которая рисует две кнопки друг на друга, а верхняя часть имеет метку и действия, а нижнюю - альфа-кнопку изображения. Я буду исследовать их немного дальше, следующим шагом я должен был сделать то, что вы предложили, и попробуйте кнопку запаса. – Royce

+0

Это не похоже на хороший подход. Попробуйте следующее: zoomInButton.imageView.alpha = 0.5; – Felixyz

+0

сделаю, спасибо. В настоящее время я отправил эту проблему с помощью setUserInteraction = NO; Это отключит событие и коснется потребления изображения на переднем плане, что позволит приложению работать правильно. Что касается того, как включить взаимодействие, но все же передать эти события/прикосновения, если не потреблять .... ну, я не мог понять это, и я попробовал массу вещей. – Royce

0

Этот вопрос старый, но я просто столкнулся с той же проблемой.

Решение, которое я использовал, заключается в создании контейнера UIView, затем добавлении UIImageView в качестве подзаголовка, затем добавлении кнопок, текстовых полей и т. Д. Кажется, хорошо работает.

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