2017-05-19 11 views
0

我有一个视图即时通讯,这将包括已经在2个不同的控制器已经布局的功能。排序混合。在视图中访问多个控制器?

我想知道我是如何在结构上处理这种方法的?因为现有视图使用选择器和一些代表发送给其控制器,但是新视图理想情况下需要访问一些控制器功能。所以我不能只选择控制器的选择器,因为它没有连接到一个? (以能够使用self.viewController)

例如当前视图功能使用:

[self.viewController performSelector:@selector(getParBusFader:) withObject:[NSNumber numberWithInteger:_busOffset - 1]]; 

在哪里,如果我想从我的新视图访问此我不能使用self.viewController,因为它有一个不同的控制器,它从其他功能。

在这里的任何解决方案,所以我可以发送视图的不同元素到不同的控制器,并防止重复?

我可以在本地实例化控制器的一个实例并以这种方式访问​​它吗?

干杯

回答

0

阅读容器和子视图控制器。如果你愿意,你可以添加多个“孩子”。使用Interface Builder时,您可以添加一个UIContainerView对象,并为您处理设置。

这里是一个非常简单的例子:

// 
// QuickTestViewController.h 
// 

#import <UIKit/UIKit.h> 

#import "FirstChildViewController.h" 

@interface QuickTestViewController : UIViewController 

@property (strong, nonatomic) FirstChildViewController *fcVC; 

@end 

// 
// QuickTestViewController.m 
// 

#import "QuickTestViewController.h" 

@interface QuickTestViewController() 

@end 

@implementation QuickTestViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // instantiate a FirstChildViewController 
    _fcVC = [[FirstChildViewController alloc] init]; 

    // add it as a Child View Controller 
    [self addChildViewController:_fcVC]; 

    // configure its view and add the view to self.view 
    _fcVC.view.frame = CGRectMake(10, 50, 200, 100); 
    _fcVC.view.backgroundColor = [UIColor blueColor]; 
    [self.view addSubview:_fcVC.view]; 

    // tell FirstChildViewController we're finished adding it 
    [_fcVC didMoveToParentViewController:self]; 

} 

- (IBAction)btnTapped:(id)sender { 
    // call a method in FirstChildViewController 
    [_fcVC performSelector:@selector(getParBusFader:) withObject:[NSNumber numberWithInteger:5]]; 
} 

@end 

// 
// FirstChildViewController.h 
// 

#import <UIKit/UIKit.h> 

@interface FirstChildViewController : UIViewController 

- (void)getParBusFader:(NSNumber *)x; 

@end 

// 
// FirstChildViewController.m 
// 

#import "FirstChildViewController.h" 

@interface FirstChildViewController() 

@end 

@implementation FirstChildViewController 

- (void)getParBusFader:(NSNumber *)x { 
    NSLog(@"passed value: %ld", (long)x.integerValue); 
} 

@end 

+0

即时消息在工作代码,没有故事板,你的建议是从字面上把其他视图放在父视图中? – jcad

+0

这个例子中唯一与故事板有关的是将一个按钮连接到一个动作。无论如何......你可以简单*实例化ViewControllers并在其中调用方法,或者你可以将它们添加为子视图控制器。作为孩子添加具有一些优势,特别是如果您还将VC视图添加到当前视图层次结构中。 – DonMag

相关问题