Когда я добавляю подкласс 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];
}
}
Любой с наконечником о том, как это сделать, выигрывает в интернетах и печенье. Также принимает револьверы для румынской рулетки. Спасибо.
Его определенно хорошая догадка. Я подклассифицировал UIButton для решения проблемы, а именно, что я хочу иметь возможность устанавливать альфа ТОЛЬКО фонового изображения, а не метки или остальной части кнопки.Я достиг этого, создав подклассическую кнопку, которая рисует две кнопки друг на друга, а верхняя часть имеет метку и действия, а нижнюю - альфа-кнопку изображения. Я буду исследовать их немного дальше, следующим шагом я должен был сделать то, что вы предложили, и попробуйте кнопку запаса. – Royce
Это не похоже на хороший подход. Попробуйте следующее: zoomInButton.imageView.alpha = 0.5; – Felixyz
сделаю, спасибо. В настоящее время я отправил эту проблему с помощью setUserInteraction = NO; Это отключит событие и коснется потребления изображения на переднем плане, что позволит приложению работать правильно. Что касается того, как включить взаимодействие, но все же передать эти события/прикосновения, если не потреблять .... ну, я не мог понять это, и я попробовал массу вещей. – Royce