1

github で利用可能な ECSlidingViewController を使用しようとしています:

https://github.com/edgecase/ECSlidingViewController

とにかく、セグエがないため、メニュービューコントローラーからサンプルテーブルビューコントローラーにデータをプッシュする方法を考えていました。ナビゲーション コントローラーはストーリーボードを介してインスタンス化されますが、データをビューから別のビューにプッシュする方法がわかりません。

デリゲートで試してみましたが、何らかの理由でデリゲートが起動しないようです。TableView は空のままです。私は何を取りこぼしたか?

以下のコードを参照してください。

//MenuviewController.h

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

@protocol TableData <NSObject>

- (void) someData:(NSString*)data;

@end

@interface MenuViewController : UIViewController <UITableViewDataSource, UITabBarControllerDelegate>{

    __unsafe_unretained id <TableData> delegate;
}

@property (nonatomic,assign) id <TableData> delegate;

@end

//MenuViewController.m

#import "MenuViewController.h"

@interface MenuViewController()
@property (nonatomic, strong) NSArray *menuItems;
@end

@implementation MenuViewController
@synthesize menuItems, delegate;

- (void)awakeFromNib
{
  self.menuItems = [NSArray arrayWithObjects:@"First", @"Second", @"Third", @"Navigation", nil];
}

- (void)viewDidLoad
{
  [super viewDidLoad];

  [self.slidingViewController setAnchorRightRevealAmount:280.0f];
  self.slidingViewController.underLeftWidthLayout = ECFullWidth;



}

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSString *cellIdentifier = @"MenuItemCell";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
  if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
  }

  cell.textLabel.text = [self.menuItems objectAtIndex:indexPath.row];

  return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSString *identifier = [NSString stringWithFormat:@"%@Top", [self.menuItems objectAtIndex:indexPath.row]];

  UIViewController *newTopViewController = [self.storyboard instantiateViewControllerWithIdentifier:identifier];

    if ([delegate respondsToSelector:@selector(someData:)]) {
        [delegate someData:@"Hello World"];
    }

  [self.slidingViewController anchorTopViewOffScreenTo:ECRight animations:nil onComplete:^{
    CGRect frame = self.slidingViewController.topViewController.view.frame;
    self.slidingViewController.topViewController = newTopViewController;
    self.slidingViewController.topViewController.view.frame = frame;
    [self.slidingViewController resetTopView];
  }];
}

@end

//SampleTableViewController.h

#import <UIKit/UIKit.h>
#import "ECSlidingViewController.h"
#import "MenuViewController.h"

@interface SampleTableViewController : UITableViewController <UITableViewDataSource, UITabBarControllerDelegate, TableData>

- (IBAction)revealMenu:(id)sender;

@end

//SampleTableViewController.m

#import "SampleTableViewController.h"

@interface SampleTableViewController()
@property (nonatomic, strong) NSArray *sampleItems;
@end

@implementation SampleTableViewController
@synthesize sampleItems;

- (void)awakeFromNib
{
  //self.sampleItems = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil];
}

- (void) someData:(NSString *)data{

    sampleItems = [NSArray arrayWithContentsOfFile:data];
}

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSString *cellIdentifier = @"SampleCell";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
  if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
  }

  cell.textLabel.text = [self.sampleItems objectAtIndex:indexPath.row];

  return cell;
}

- (IBAction)revealMenu:(id)sender
{
  [self.slidingViewController anchorTopViewTo:ECRight];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
  return YES;
}

@end
4

2 に答える 2

1

デリゲートを使用することをお勧めします。以下に例を示します:デリゲートの例

于 2013-04-05T17:30:31.750 に答える