Подтвердить что ты не робот

Включить и отключить элемент панели вкладок нажатием кнопки в xcode?

У меня есть 5 элементов панели вкладок. Первой будет страница входа. Когда пользователь не выполнил вход в другую вкладку, элементы bat будут отключены, но когда пользователь войдет в систему, нажав кнопку navigationItem, будут активированы все остальные элементы bat tab.

Я сделал поиск и ничего не нашел...: (

Здесь мой код:

MainTabViewController.h
#import <UIKit/UIKit.h>

@interface MainTabViewController : UITabBarController
@property (retain, nonatomic) IBOutlet UITabBar *MainTabBar;

@end


MainTabViewController.m

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


    UITabBarItem *tabBarItem = [[MainTabBar items] objectAtIndex:1];
    [tabBarItem setEnabled:FALSE];


}

LoginViewController.h



#import <UIKit/UIKit.h>

@interface LoginViewController : UIViewController
@property (retain, nonatomic) IBOutlet UITextField *CustomerUsername;
@property (retain, nonatomic) IBOutlet UITextField *CustomerPassword;
- (IBAction)ResignKeyboardClicked:(id)sender;

@end

LoginViewController.m

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

    UIBarButtonItem *btnGo = [[UIBarButtonItem alloc] initWithTitle:@"Login"     style:UIBarButtonItemStyleBordered target:self action:@selector(loginAction)];
    self.navigationItem.rightBarButtonItem = btnGo;

}

- (void) LoginAction {
     AppDelegate *passData = (AppDelegate *)[[UIApplication sharedApplication] delegate];

        if ([CustomerUsername.text isEqualToString:@""] || [CustomerPassword.text     isEqualToString:@""]) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"alert" message:@"Please Fill     all the field" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];

        return;
    }
    // i will use a code from connect to DB tutorial
    NSString *strURL = [NSString stringWithFormat:@"http://localhost:8888/Staff.php?userName=%@&password=%@",CustomerUsername.text, CustomerPassword.text];

    // to execute php code
    NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];

    // to receive the returend value
    NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];


    if ([strResult isEqualToString:@"1"])
    {
        //MainTabViewController *main = [[MainTabViewController alloc] initWithNibName:nil bundle:nil];
        //UITabBarItem *tabBarItem = [[main.MainTabBar items] objectAtIndex:1];
        //[tabBarItem setEnabled:TRUE];

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"You are now Logged In" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];

    return;
    }
    else
    {
        // invalid information
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"alert" message:@"Invalide Information" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];

        return;

    }
}

В настоящее время мой код отключает только те другие элементы вкладки, но я не знаю, как включить все элементы bat tab во время входа пользователя.

Пожалуйста, помогите?

Спасибо!: D

4b9b3361

Ответ 1

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

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

[[[[self.tabBarController tabBar]items]objectAtIndex:1]setEnabled:FALSE];
[[[[self.tabBarController tabBar]items]objectAtIndex:2]setEnabled:FALSE];
[[[[self.tabBarController tabBar]items]objectAtIndex:3]setEnabled:FALSE];

И снова вы можете включить их с помощью:

[[[[self.tabBarController tabBar]items]objectAtIndex:1]setEnabled:TRUE];
[[[[self.tabBarController tabBar]items]objectAtIndex:2]setEnabled:TRUE];
[[[[self.tabBarController tabBar]items]objectAtIndex:3]setEnabled:TRUE];

Итак, ваша функция LoginAction будет выглядеть так:

- (void) LoginAction {
     AppDelegate *passData = (AppDelegate *)[[UIApplication sharedApplication] delegate];

        if ([CustomerUsername.text isEqualToString:@""] || [CustomerPassword.text     isEqualToString:@""]) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"alert" message:@"Please Fill     all the field" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];

        return;
    }
    // i will use a code from connect to DB tutorial
    NSString *strURL = [NSString stringWithFormat:@"http://localhost:8888/Staff.php?userName=%@&password=%@",CustomerUsername.text, CustomerPassword.text];

    // to execute php code
    NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];

    // to receive the returend value
    NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];

    if ([strResult isEqualToString:@"1"]) {
        //MainTabViewController *main = [[MainTabViewController alloc] initWithNibName:nil bundle:nil];
        //UITabBarItem *tabBarItem = [[main.MainTabBar items] objectAtIndex:1];
        //[tabBarItem setEnabled:TRUE];

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"You are now Logged In" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];

        [[[[self.tabBarController tabBar]items]objectAtIndex:1]setEnabled:TRUE];
        [[[[self.tabBarController tabBar]items]objectAtIndex:2]setEnabled:TRUE];
        [[[[self.tabBarController tabBar]items]objectAtIndex:3]setEnabled:TRUE];

        return;
    }
    else {
        // invalid information
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"alert" message:@"Invalide Information" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];

        return;
    }
}

Я надеюсь, что это помогло: D

Ответ 2

Я обновил решение от @RonzyFonzy для работы с N количеством элементов панели табуляции:

 for (UITabBarItem *tmpTabBarItem in [[self.tabBarController tabBar] items])
           [tmpTabBarItem setEnabled:NO];