Impedir que la barra de pestañas cambie de pestaña en un índice específico - IOS

Gracias por leer mi pregunta.

Estoy tratando de implementar un menú emergente cuando un usuario hace clic en la pestaña con el índice de 4. Así que estoy tratando de evitar que la barra de pestañas cambie el controlador de vista cuando se presiona el índice 4.

Aquí está mi código:

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    if(viewController == [tabBarController.viewControllers objectAtIndex:4]){        
        NSLog(@"NO");
        return NO;
    }else{
        NSLog(@"YES");
        return YES;
    }

}

He implementado elUITabBarControllerDelegate yself.delegate = self; en elviewDidLoad y funciona pero solo una vez.

Cuando hago clic en la pestaña del índice 4, el menú muestra y la barra de pestañas no cambia de vista (GENIAL), pero cuando vuelvo a hacer clic en él, la vista cambia incluso si aparece el registro "NO". Cual podría ser el problema aquí?

Gracias por cualquier sugerencia!

Resuelto

Gracias a la respuesta de Kasaname a continuación, lo resolví agregando el índice seleccionado y configurándolo en un índice de bandera (prevtab). Cambié el prevtab al índice de la última pestaña seleccionada, excepto cuando el usuario selecciona el índice 4. Mi código final:

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    if(viewController == [tabBarController.viewControllers objectAtIndex:4]){
        self.selectedIndex = prevTab; //only change in this method       
        return NO;
    }else{        
        return YES;
    }

}

Respuestas a la pregunta(2)

Su respuesta a la pregunta