Когда я добавляю подкласс UIImageView
(полноэкранный) за парой экземпляров подкласса UIButton
, эти кнопки перестают получать прикосновения и больше не работают. Ничто из того, что я пробовал, не помогло восстановить их связь с прикосновениями пользователя.
Я пробовал:
a) Использование подкласса UIImageView
для вида спереди (который принимает прикосновения) и убедитесь, что setUserInteractionEnabled
- ДА. Результат: UIButtons
не отвечает, когда присутствует UIView
.
b) Явно передавая прикосновения от вида спереди к контроллеру вида в надежде, что он сделает правильные вещи. Результат: UIButtons
не реагирует на прикосновения.
c) Вызов методов 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];
}
}
Любой, у кого есть подсказка о том, как это сделать, выигрывает интернет и печенье. Также принимаем револьверы для русской рулетки хаос. Спасибо.