2011-12-22 3 views
0

Iは、(計算されたアプリケーションでFlipboardのナビゲーションコントローラに、すなわち同様の)画面全体を占める私の「FirstViewController」のサブビューとして追加されるのUIViewController「NavigationViewController」を有します。多くのビューは、ユーザーの選択に基づいて追加または削除されます。私が追加され、「多くのビュー」の中から「FirstViewController」navigationControllerにビューコントローラをプッシュできるようにしたいです。この場合、「FeaturedViewController」を選択することができるそれらの多くのビューのいずれかです。デリゲートプロトコルが定義されているContentViewControllerを継承します。。ナビゲーションコントローラプッシュビュー。代理人またはNSNotificationCenterまたはクラスメソッド?

TL; DR最初のビューでnavigationcontrollerにアクセスして、追加されたサブビュー "FeaturedViewController"からビューをプッシュしたいとします。ここで

は視覚的な表現である:ここでは

動作しません。私の現在の試みである:ここでは enter image description here

からの私のコードがあります。最も簡単なルートはNSNotificationCenterを使用することであろうように注意、私は多くの音に

/* First View Controller */ 

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

@interface ViewController : UIViewController <BaseViewDelegate, ContentViewDelegate> 
{ 
    IBOutlet UINavigationController *navigationController; 
    ContentViewController *contentView; 
} 

@property (strong, nonatomic) IBOutlet UINavigationController *navigationController; 
@property (strong, nonatomic) ContentViewController *contentView; 

--------------------------------------------------------- 

#import "ViewController.h" 
#import "NavigatorViewController.h" 
#import "BinViewController.h" 

@implementation ViewController 
@synthesize navigationController, contentView; 

static NSArray *viewArray = nil; 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    self.navigationController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 
    [self.view addSubview:navigationController.view]; 

    // Navigation View is used to navigate throughout the entire application 
    NavigatorViewController *navController = [[NavigatorViewController alloc] init]; 

    contentView = [[ContentViewController alloc] init]; 

    contentView.delegate = self; 

    // Add the views to the array (using ARC) 
    viewArray = [NSArray arrayWithObjects:navController, contentView, nil]; 

} 

-(void)displayNavigator 
{ 
    // Get the right view controller  
    UIViewController *viewController = [viewArray objectAtIndex:0]; 
    // Add the subview to the view 
    [self.view addSubview:viewController.view]; 
} 

-(void)pushViewController:(UIViewController *)viewController 
{  
    NSLog(@"First View Push View Controller called"); 

    [self.navigationController pushViewController:viewController animated:YES]; 
} 
@end 

/* Content View Controller */ 

@class ContentViewController; 
@protocol ContentViewDelegate <NSObject> 
-(void)pushViewController:(UIViewController *)viewController; 
@end 

@interface ContentViewController : UIViewController 
{ 
    __weak id <ContentViewDelegate> delegate;  
} 

@property (weak) __weak id <ContentViewDelegate> delegate; 

- (void)pushView:(UIViewController *)viewController; 

@end 

--------------------------------------------------------- 

#import "ContentViewController.h" 
#import "BinViewController.h" 

@implementation ContentViewController 

@synthesize delegate; 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad 
{ 
    [super viewDidLoad];  
} 

- (void)pushView:(UIViewController *)viewController 
{   

    NSLOG(@"Push View from ContentViewController"); 
    if ([delegate respondsToSelector:@selector(pushViewController)]) 
     [delegate pushViewController]; 

} 

@end 

/* View that is added to the navigator view (it inherits ContentViewController where the delegate protocol is defined)*/ 
#import <UIKit/UIKit.h> 
#import "ContentViewController.h" 

@interface FeaturedViewController : ContentViewController <CustomPagingDelegate> 

@end 

--------------------------------------------------------- 

#import "FeaturedViewController.h" 
#import "BinViewController.h" 

@implementation FeaturedViewController 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

} 

- (void) touchUpInsideItemAtIndex:(NSUInteger)itemIndex 
{ 
    // [[[[[self view] superview] superview] superview] removeFromSuperview]; 
    NSLOG(@"Touch up inside from featured view"); 

    BinViewController *binViewController = [[BinViewController alloc] init]; 

    [self pushView:binViewController];  
} 

@end 

答えて

0

多くの1または1に「ナビゲーションコントローラ」に関連するいくつかのコードを取り出しました。

+0

ありがとうございます。 NSNotificationCenterで把握しました。 – morcutt

関連する問題