2017-05-19 22 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

相關問題