Обрабатывать UIButton в дочернем контроллере представления контроллера контейнера

Я работаю над созданием пользовательского класса Container ViewController и могу создать 5 дочерних контроллеров представления и могу перейти от одного дочернего контроллера представления к другому дочернему с использованием следующего API:

transitionFromViewController:fromViewController
        toViewController:toViewController
            duration:1.0
             options:0
          animations:^{
                              }
          completion:^(BOOL finished) {
                          }];

Контроллеры дочерних представлений занимают часть Parent View Controller. Каждый раз, когда пользователь проводит пальцем по экрану, предыдущий контроллер отключается, а текущий контроллер появляется в отображаемой области.

Теперь у меня есть кнопки на дочерних контроллерах представления, и когда я нажимаю на них, я не получаю события или не вызываю метод Action дочернего контроллера представления. Но Parent View Controller получает обратные вызовы для своих кнопок, даже если в данный момент отображается childview. Кто-нибудь может помочь как можно скорее. Добавив фрагмент кода ниже (хотя он немного больше, это поможет вам проанализировать, если я делаю какую-либо ошибку). Это действительно срочная просьба.. плз, помогите мне..

Родительский ViewController:

- (void) handleSwipeGestureLeft:(UISwipeGestureRecognizer *)gesture
{
    if (showPopupValue) {
        return;
    }

    NSInteger index = [arrayOfChildVCs indexOfObject:selectedViewController];
    index = MIN(index+1, [arrayOfChildVCs count]-1);

    UIViewController *newSubViewController = [arrayOfChildVCs objectAtIndex:index];


    endFrame.origin.x = -1024;

    startOfNewVCFrame.origin.x = 1024;

    [self transitionFromViewController:selectedViewController toViewController:newSubViewController];
    selectedViewController = newSubViewController;

}
- (void) handleSwipeGestureRight:(UISwipeGestureRecognizer *)gesture
{
    if (showPopupValue) {
        return;
    }

    NSInteger index = [arrayOfChildVCs indexOfObject:selectedViewController];
    index = MAX(index-1, 0);

    UIViewController *newSubViewController = [arrayOfChildVCs objectAtIndex:index];

    endFrame.origin.x = 1024;

    startOfNewVCFrame.origin.x = -1024;

    [self transitionFromViewController:selectedViewController toViewController:newSubViewController]; 
    selectedViewController = newSubViewController;

}

- (void) populateChildVCList
{


    if (self.currentactivity == EPI_Normal) 
    {
        arrayOfImageNames = [[NSArray alloc]initWithObjects:@"AD_Initiate_SPI_Normal.jpg", @"AD_Initiate_CPI_Normal.jpg", @"AD_Initiate_EAC_Normal.jpg", @"AD_Initiate_PV_Normal.jpg", @"AD_Initiate_EV_Normal.jpg", nil];
    }
    else 
    {
        arrayOfImageNames = [[NSArray alloc]initWithObjects:@"AD_Initiate_SPI_Trigger.jpg", @"AD_Initiate_CPI_Trigger.jpg", @"AD_Initiate_EAC_Trigger.jpg", @"AD_Initiate_PV_Trigger.jpg", @"AD_Initiate_EV_Trigger.jpg", nil];
        isTriggerOn = YES;
    }


    arrayOfChildVCs = [[NSMutableArray alloc] init];

    [arrayOfChildVCs addObject:[[PopupDummyViewController alloc]initWithNibName:@"PopupDummyViewController" bundle:nil]]; // Note: Add one dummy VC to initiate swap

    for (int vcIndex = 0; vcIndex < [arrayOfImageNames count]; vcIndex++) 
    {
        PiSLAComplianceViewController *childPopupController = [[PiSLAComplianceViewController alloc]initWithNibName:@"PiSLAComplianceViewController" bundle:nil];

        childPopupController.popUpImageName = [arrayOfImageNames objectAtIndex:vcIndex];
        childPopupController.imageIndex = vcIndex;
        childPopupController.isTriggerOn = isTriggerOn;

        [arrayOfChildVCs addObject:childPopupController];
    }

    selectedViewController = [arrayOfChildVCs objectAtIndex:0];
    selectedViewController.view.frame = CGRectMake(0, 100, 100, 511); // Took the imageview coordinates
    // Add the dummy view controller to Container View Initially
    [self addChildViewController:selectedViewController];

    [self.view addSubview:selectedViewController.view];

    // notify it that move is done
    [selectedViewController didMoveToParentViewController:self];
}

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

    [super viewDidLoad];

    UISwipeGestureRecognizer *swipeGestureRecognizerRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeGestureRight:)];
    [swipeGestureRecognizerRight setDirection:UISwipeGestureRecognizerDirectionRight];
    [ self.view addGestureRecognizer:swipeGestureRecognizerRight];

    UISwipeGestureRecognizer *swipeGestureRecognizerLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeGestureLeft:)];
    [swipeGestureRecognizerLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
    [ self.view addGestureRecognizer:swipeGestureRecognizerLeft];

    endFrame = deliverableimageview.frame;
    startOfNewVCFrame = deliverableimageview.frame;

    [self populateChildVCList]; // To Create list of child view controllers and loads one invisible dummy view controller to be ready for swiping

}

- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController
{
    if (fromViewController == toViewController)
    {
        // cannot transition to same
        return;
    }

    // animation setup


    toViewController.view.frame = startOfNewVCFrame;

    // notify
    [fromViewController willMoveToParentViewController:nil];
    [self addChildViewController:toViewController];

    // transition
    [self transitionFromViewController:fromViewController
                      toViewController:toViewController
                              duration:1.0
                               options:0
                            animations:^{
                                toViewController.view.frame = fromViewController.view.frame;
                                fromViewController.view.frame = endFrame;
                            }
                            completion:^(BOOL finished) {
                                [toViewController didMoveToParentViewController:self];
                                [fromViewController removeFromParentViewController];

                            }];



}

0 ответов

Другие вопросы по тегам