Подкласс UIImageView не передает касания в подпредставления контроллера - PullRequest
2 голосов
/ 27 июля 2010

Когда я добавляю подкласс 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];
    }
}

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

Ответы [ 2 ]

0 голосов
/ 20 октября 2011

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

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

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

0 голосов
/ 27 июля 2010

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

UIButton* myButton = [UIButton buttonWithType:UIButtonTypeCustom];

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

...