0

アプリのサイド メニューにこれを使用しています: https://github.com/romaonthego/RESideMenu

ただし、2 つの配列で動作させるには問題があります。ユーザーがログインしている場合は RESideMenu に特定のメニュー項目の配列を表示し、ユーザーがいない場合は別のメニュー項目の配列を表示したいと考えています。

アプリを開いて、ログインしていないとしましょう。メニューを開くと、正しいメニューが表示されます。ただし、ログインすると、再度開いてもメニューは変更されず、ログインしていない場合と同じままです。今、アプリを開いてログインしていない場合、ログインし、アプリをマルチタスクから外し、もう一度開くと、「ログイン済み」メニューが表示されます!

メニュー ビューの .h ファイルのコードは次のとおりです。

//
//  JSAMenuViewController.h
//  JSApp
//
//  Created by Jacob Klapper on 10/31/13.
//
//

#import <UIKit/UIKit.h>
#import "RESideMenu.h"

@interface JSAMenuViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, RESideMenuDelegate>

@property (strong, readwrite, nonatomic) UITableView *tableView;

@property NSArray *currentArray;

@property NSArray *inTitles;

@property NSArray *outTitles;

@end

そして.m:

//
//  JSAMenuViewController.m
//  JSApp
//
//  Created by Jacob Klapper on 10/31/13.
//
//

#import "JSAMenuViewController.h"
#import "UIViewController+RESideMenu.h"
#import <Parse/Parse.h>

@interface JSAMenuViewController ()

@end

@implementation JSAMenuViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    //height 54 * 5
    //y = (self.view.frame.size.height - 54 * 5) / 2.0f
    self.tableView = ({
        UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, (self.view.frame.size.height - 490) / 2.0f, self.view.frame.size.width, 490) style:UITableViewStylePlain];
        tableView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;
        tableView.delegate = self;
        tableView.dataSource = self;
        tableView.opaque = NO;
        tableView.backgroundColor = [UIColor clearColor];

        tableView.backgroundView = nil;
        tableView.backgroundColor = [UIColor clearColor];
        tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        tableView.bounces = NO;
        tableView.scrollsToTop = NO;
        tableView;
    });
    [self.view addSubview:self.tableView];

    self.inTitles = [NSArray arrayWithObjects:@"Login", @"Register", @"About Us", @"Who's Who", @"Request a Position", @"My Debates", @"Submit an Idea", @"Debates", @"Logout", nil];

    self.outTitles = [NSArray arrayWithObjects:@"Login", @"Register", @"About Us", @"Who's Who", nil];

    if([PFUser currentUser])
    {
        self.currentArray = self.inTitles;
        [self.tableView reloadData];
    }

    else
    {
        self.currentArray = self.outTitles;
        [self.tableView reloadData];
    }

    [self.tableView reloadData];
    //self.sideMenu.openStatusBarStyle = UIStatusBarStyleLightContent;
    //self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

    //[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}


#pragma mark -
#pragma mark UITableView Delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    UINavigationController *navigationController = (UINavigationController *)self.sideMenuViewController.contentViewController;

    switch (indexPath.row) {
        case 0:

            if([PFUser currentUser])
            {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Already Logged In" message:@"Proceeding to the login screen will log you out of your current session." delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];

                alert.tag = 2;
                [alert show];
            }
            /*
            navigationController.viewControllers = @[[self.storyboard instantiateViewControllerWithIdentifier:@"login"]];
            [self.sideMenuViewController hideMenuViewController];
             */
            break;
        case 1:
            navigationController.viewControllers = @[[self.storyboard instantiateViewControllerWithIdentifier:@"register"]];
            [self.sideMenuViewController hideMenuViewController];
            break;
        case 2:
            navigationController.viewControllers = @[[self.storyboard instantiateViewControllerWithIdentifier:@"about"]];
            [self.sideMenuViewController hideMenuViewController];
            break;
        case 3:
            navigationController.viewControllers = @[[self.storyboard instantiateViewControllerWithIdentifier:@"who"]];
            [self.sideMenuViewController hideMenuViewController];
            break;
        case 4:
            navigationController.viewControllers = @[[self.storyboard instantiateViewControllerWithIdentifier:@"request"]];
            [self.sideMenuViewController hideMenuViewController];
            break;
        case 5:
            navigationController.viewControllers = @[[self.storyboard instantiateViewControllerWithIdentifier:@"my"]];
            [self.sideMenuViewController hideMenuViewController];
            break;
        case 6:
            navigationController.viewControllers = @[[self.storyboard instantiateViewControllerWithIdentifier:@"submit"]];
            [self.sideMenuViewController hideMenuViewController];
            break;
        case 7:
            navigationController.viewControllers = @[[self.storyboard instantiateViewControllerWithIdentifier:@"debates"]];
            [self.sideMenuViewController hideMenuViewController];
            break;
        case 8:
            [PFUser logOut];
            navigationController.viewControllers = @[[self.storyboard instantiateViewControllerWithIdentifier:@"login"]];
            [self.sideMenuViewController hideMenuViewController];
            break;
        default:
            break;
    }
}

#pragma mark -
#pragma mark UITableView Datasource

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 54;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sectionIndex
{
    return [self.currentArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        cell.backgroundColor = [UIColor clearColor];
        cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:21];
        cell.textLabel.textColor = [UIColor whiteColor];
        cell.textLabel.highlightedTextColor = [UIColor lightGrayColor];
        cell.selectedBackgroundView = [[UIView alloc] init];
    }

    /*
    NSArray *titles = @[@"Login", @"Register", @"About Us", @"Who's Who", @"Request a Position", @"My Debates", @"Submit an Idea", @"Debates", @"Logout"];
    NSArray *images = @[@"group-50white@2x.png", @"group-50white@2x.png", @"group-50white@2x.png", @"group-50white@2x.png", @"group-50white@2x.png", @"group-50white@2x.png", @"group-50white@2x.png", @"group-50white@2x.png", @"group-50white@2x.png"];
     */
    cell.textLabel.text = self.currentArray[indexPath.row];
    //cell.imageView.image = [UIImage imageNamed:images[indexPath.row]];

    return cell;
}

#pragma mark -
#pragma mark RESideMenu Delegate

- (void)sideMenu:(RESideMenu *)sideMenu willShowMenuViewController:(UIViewController *)menuViewController
{
    NSLog(@"willShowMenuViewController");
}

- (void)sideMenu:(RESideMenu *)sideMenu didShowMenuViewController:(UIViewController *)menuViewController
{
    NSLog(@"didShowMenuViewController");
}

- (void)sideMenu:(RESideMenu *)sideMenu willHideMenuViewController:(UIViewController *)menuViewController
{
    NSLog(@"willHideMenuViewController");
}

- (void)sideMenu:(RESideMenu *)sideMenu didHideMenuViewController:(UIViewController *)menuViewController
{
    NSLog(@"didHideMenuViewController");
}

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {


    if(alertView.tag == 2)
    {
        if(buttonIndex == 1)
        {
            [PFUser logOut];
            [self.tableView reloadData];
            UINavigationController *navigationController = (UINavigationController *)self.sideMenuViewController.contentViewController;

            navigationController.viewControllers = @[[self.storyboard instantiateViewControllerWithIdentifier:@"login"]];
            [self.sideMenuViewController hideMenuViewController];

        }
    }


}

@end

テーブルビュー メニューで 2 つの配列を実装/使用するには、別のことをする必要がありますか?

ありがとう!

4

1 に答える 1

1

私は自分の問題を解決したと信じています。配列を変更するコードをさまざまなメソッドに入れてみましたが、これはうまくいきました:

- (void)sideMenu:(RESideMenu *)sideMenu willShowMenuViewController:(UIViewController *)menuViewController
{
    NSLog(@"willShowMenuViewController");

    self.inTitles = [NSArray arrayWithObjects:@"Login", @"Register", @"About Us", @"Who's Who", @"Request a Position", @"My Debates", @"Submit an Idea", @"Debates", @"Logout", nil];

    self.outTitles = [NSArray arrayWithObjects:@"Login", @"Register", @"About Us", @"Who's Who", nil];

    if([PFUser currentUser])
    {
        self.currentArray = self.inTitles;
        [self.tableView reloadData];
    }

    else
    {
        self.currentArray = self.outTitles;
        [self.tableView reloadData];
    }

    [self.tableView reloadData];
}

メニューが表示されるたびに呼び出されます。

于 2013-11-03T14:11:05.627 に答える