在视图中访问多个控制器?

时间:2017-05-19 11:37:25

标签: ios objective-c delegates selector

我有一个视图即时制作,它将包含已在2个不同控制器中布局的功能。一种混合动力。

我想知道我是如何在结构上处理这种方法的?由于现有视图使用选择器和几个代表发送到他们的控制器,但是新视图理想地希望访问几个控制器功能。所以我不能只选择控制器,因为它只与一个连接? (能够使用self.viewController)

例如,当前视图功能使用:

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

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

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

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

干杯

1 个答案:

答案 0 :(得分: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