События обработки UIWindow addSubview

Я хочу создать настраиваемое оповещение с помощью UIViewController и добавить его представление в качестве подпредставления к текущему окну. Представление отображается очень хорошо, но я не могу обрабатывать события касания.

Я много раз пытался добавить кнопку в этот контроллер просмотра и добавить цель. Я также пытался добавить UITapGestureRecognizer и установить представление userInteractionEnabled на true, но это также не удалось, даже когда я очистил все подвиды, просто оставив кнопку.

Я что-то пропустил?

Вот код:

Контроллер просмотра CustomAlert:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    self.view.backgroundColor = [UIColor clearColor];

    backgroundView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    backgroundView.backgroundColor = [UIColor blackColor];
    backgroundView.alpha = 0.5;
    [self.view addSubview:backgroundView];


    backImage = [[UIImageView alloc]initWithFrame:CGRectMake((self.view.frame.size.width - 300) / 2, (self.view.frame.size.height - 250) / 2, 300, 250)];

    backImage.image = [UIImage imageNamed:@"AlertBackground"];
    [self.view addSubview:backImage];

    confirmButton = [[UIButton alloc]initWithFrame:CGRectMake( backImage.frame.origin.x + 100 , backImage.frame.origin.y + 250 - 40, 100, 26)];
    [self.view addSubview:confirmButton];
    [confirmButton addTarget:self action:@selector(confirmButtonClick:) forControlEvents:UIControlEventTouchUpInside];
    confirmButton.backgroundColor = [UIColor redColor];
    [confirmButton setTitle:@"click me" forState:UIControlStateNormal];
}

-(void)confirmButtonClick:(UIButton*)sender{

    [self.view removeFromSuperview];
}

-(void)show{
    UIWindow * window = (UIWindow*)[UIApplication sharedApplication].keyWindow;
    [window addSubview:self.view];
}

Пользовательское оповещение о вызове метода:

CustomAlert * alert = [[CustomAlert alloc]init];
[alert show];

person Castiel    schedule 30.08.2016    source источник
comment
Можете ли вы показать код, который вы используете?   -  person Paulw11    schedule 30.08.2016
comment
Пожалуйста, покажите свой код, чтобы было легко понять, что вы делаете.   -  person Abha    schedule 30.08.2016
comment
@ Paulw11 спасибо. я надел там   -  person Castiel    schedule 30.08.2016
comment
@Abha ценю вашу помощь   -  person Castiel    schedule 30.08.2016
comment
@Castiel: проблема в том, что CustomAlert Viewcontroller не обрабатывается. Вы должны addChildViewController до addSubview.   -  person tuledev    schedule 30.08.2016
comment
@anhtu я пытаюсь добавитьchildviewcontroller для текущего window.rootviewcontroller перед addsubview. но это дало мне ошибку: причина: «контроллер дочернего представления: ‹CustomAlert: 0x14f8a9580› должен иметь родительский контроллер представления: (null), но фактический родитель: ‹REFrostedViewController: 0x14e579790›»   -  person Castiel    schedule 30.08.2016
comment
@anhtu я неправильно понял?   -  person Castiel    schedule 30.08.2016
comment
@Castiel Это означает, что вы где-то добавили предупреждение VC в VC. С кодом, который вы показали, я не видел, где вы добавили. Проверьте еще раз, пожалуйста.   -  person tuledev    schedule 30.08.2016


Ответы (1)


Попробуйте переписать свой метод -show{} с помощью этих

UIWindow * window = (UIWindow*)[UIApplication sharedApplication].keyWindow;
[window.rootViewController.view addSubview:self.view];

ОБНОВЛЕНИЕ: И если предыдущие не помогают, попробуйте перезаписать

-(void)show{
    UIWindow * window = (UIWindow*)[UIApplication sharedApplication].keyWindow;

    [window.rootViewController addChildViewController:self];
    [window.rootViewController.view addSubview:self.view];
    [self didMoveToParentViewController:window.rootViewController];
}

Эти три метода устанавливают отношения родитель-потомок.

person Mr.Fingers    schedule 30.08.2016
comment
спасибо за помощь. Я пробовал это. это работает хорошо. И вчера я изменил свой код, чтобы просто использовать uiview вместо uiviewcontroller. тоже было хорошо. - person Castiel; 31.08.2016