Verhindert, dass die Registerkarte an einem bestimmten Index - IOS - geändert wird

Vielen Dank für das Lesen meiner Frage.

Ich versuche, ein Popup-Menü zu implementieren, wenn ein Benutzer auf den Tab mit dem Index 4 klickt. Daher versuche ich zu verhindern, dass die Tab-Leiste den Viewcontroller wechselt, wenn der Index 4 gedrückt wird.

Hier ist mein Code:

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

}

Ich habe das implementiertUITabBarControllerDelegate undself.delegate = self; in demviewDidLoad und es funktioniert doch nur einmal.

Wenn ich auf die Registerkarte "Index 4" klicke, wird das Menü angezeigt und die Registerkarte wechselt nicht die Ansicht (GROSSARTIG), aber wenn ich erneut klicke, ändert sich die Ansicht, auch wenn ich das Protokoll "NEIN" erhalte. Woran könnte das liegen?

Vielen Dank für alle Vorschläge!

Gelöst

Dank der Antwort von Kasaname löste ich das Problem, indem ich selectedindex hinzufügte und es auf einen Flag-Index (prevtab) setzte. Ich ändere die Registerkarte prevtab in den Index der zuletzt ausgewählten Registerkarte, außer wenn der Benutzer den Index 4 auswählt. Mein endgültiger Code:

- (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;
    }

}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage