web-dev-qa-db-ja.com

xcodeのボタンクリックでタブバーアイテムを有効または無効にしますか?

5つのタブバーアイテムがあります。最初のものはログインページになります。ユーザーが他のタブバットアイテムにログオンしていない場合は無効になりますが、ユーザーがnavigationItemボタンをクリックしてログオンすると、他の4つのタブバットアイテムはすべて有効になります。

検索しても何も見つかりませんでした... :(

これが私のコードです:

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;

    }
}

今のところ、私のコードは他の4つのタブバーアイテムのみを無効にしますが、ユーザーがログインしたときにすべてのタブバットアイテムを有効にする方法がわかりません。

助けてください?

ありがとう! :D

14
user1580957

私はiOS開発の初心者であると言わざるを得ません。私はあなたを助けることができると思います。

ストーリーボードで、TabBarControllerと他のすべてのUIViewControllerを作成します。それらをTabBarControllerにリンクし、割り当てクラスを追加します。あなたの場合、UIViewControllerの1つは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

41
RonzyFonzy

@RonzyFonzyからソリューションを更新して、N個のタブバーアイテムを処理できるようにしました。

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