objective-c - 如何在 objective-c 中实现多个 Controller

标签 objective-c ios model-view-controller core-data gridview

首先,我不知道“ Controller ”这个词是否合适。我想要实现的是这个。

   @interface ClubViewController : CoreDataTableViewController :NRGridViewController
   {

我知道这在 Objective-C 中是不可能的。但是有办法解决这个问题吗? 因为我想使用 CoreDateTableViewController 和 NRGridViewController。

亲切的问候

史蒂夫 编辑

这就是我的 Storyboard层次结构的样子。

-ViewController
  -TableView
      -View
      -TableViewCell

所以我有一个 tableview Controller,但是在这个 tableview controller 上方你会发现一个带有三个按钮的小 View 。当我按下按钮 1 时,我想拿走 tableview 并使用 NRGridview Controller 绘制一个 gridView。但是当我按下按钮 2 和 3 时,我使用 CoreDataTableViewController 填充了我的表格 View 。

我希望这能更多地解释我的问题。

最佳答案

我认为一种方法是使用一个容器 View ,其中包含一个容器 View Controller 。该容器 Controller 将有 2 个子 Controller ,它们是您的 CoreDateTableViewController 和 NRGridViewController。我已经实现了类似的东西,如果您有兴趣,我可以向您展示一些代码。

编辑后:在测试应用程序中,我从一个单一的 View 模板和一个 Storyboard开始。我在 View 的顶部添加了两个按钮,在 View 的下半部分添加了一个容器 View (第一个 Controller 属于 ViewController 类)。然后我拖出一个新的 View Controller ,并将控件从容器 View 拖到新 Controller 并选择“嵌入 segue”(这会将 View 调整为与容器 View 相同的大小)。这个 Controller 的类被更改为我的子类,ContainerController。然后,我为将由容器 Controller 管理的 2 个 View 再创建 2 个 Controller ( View 需要在 IB 中将其大小设置为“自由格式”,以便您可以将大小设置为与容器 View 相同)。这是 ContainerController 中的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.cont1 = [[FirstController alloc]initWithNibName:@"FirstView" bundle:nil];
    self.cont2 = [[SecondController alloc]initWithNibName:@"SecondController" bundle:nil];
    [self addChildViewController:self.cont1];
    self.currentController = self.cont1;
    [self.view addSubview:self.cont1.view];
}

-(void)switchToFirst {
    if (self.currentController != self.cont1) {
        [self addChildViewController:self.cont1];
        [self moveToNewController:self.cont1];
    }
}

-(void)switchToSecond {
    if (self.currentController != self.cont2) {
        [self addChildViewController:self.cont2];
        [self moveToNewController:self.cont2];
    }
}

-(void)moveToNewController:(id) newController {
    [self.currentController willMoveToParentViewController:nil];
    [self transitionFromViewController:self.currentController toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{}
                            completion:^(BOOL finished) {
                                [self.currentController removeFromParentViewController];
                                [newController didMoveToParentViewController:self];
                                self.currentController = newController;
                            }];
}

我在 ViewController 中拥有的唯一代码是用于切换 View 的 2 个按钮的 IBAction。这些方法只是调用容器 Controller 中的方法:

-(IBAction)chooseFirstController:(id)sender {
    [self.childViewControllers.lastObject switchToFirst];
}

-(IBAction)chooseSecondController:(id)sender {
    [self.childViewControllers.lastObject switchToSecond];
}

关于objective-c - 如何在 objective-c 中实现多个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12841635/

相关文章:

ios - 更改 View 的值及其图层的值

ios - Phonegap 本地构建因媒体插件而失败

java - 我如何在 MVC-gui 中使用 JUNG2?

javascript - MVC 中表格上的自定义工具提示 - 显示每行数据

ios - 导航和标签栏 Controller 未显示

ios - UICollectionView 垂直全屏和水平 2 个屏幕

ios - 对 UIImage 对象的引用是否保存在内存中?

ios - 根据留空的文本字段选择计算

ruby-on-rails - rails 上的 ruby : Multiple controllers in one view

ios - 在 NSUserDefaults 中保存和检索对象数组