アプリのサイド メニューにこれを使用しています: 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 つの配列を実装/使用するには、別のことをする必要がありますか?
ありがとう!