首先我不知道如果控制器是正确的词。我想要实现的是这个。
@interface ClubViewController : CoreDataTableViewController :NRGridViewController
{
我知道在目标C中这是不可能的。但是有办法解决这个问题吗? 因为我想使用CoreDateTableViewController和NRGridViewController。
亲切的问候
燕姿 的修改
这就是我的故事板层次结构的样子。
-ViewController
-TableView
-View
-TableViewCell
所以我有一个tableview控制器,但在这个tableview控制器上方你会发现一个带有三个按钮的小视图。当我按下按钮1时,我想取走tableview并使用NRGridview Controller绘制gridView。但是当我按下按钮2和3时,我使用CoreDataTableViewController填充我的tableview。
我希望这更能解释我的问题。
答案 0 :(得分:2)
我认为一种方法是使用容器视图,其中包含容器视图控制器。该容器控制器将有2个子控制器,它们将是您的CoreDateTableViewController和NRGridViewController。我已经实现了这样的东西,如果你有兴趣我可以给你看一些代码。
编辑后:在测试应用中,我开始使用单个视图模板和故事板。我在视图的顶部添加了两个按钮,在视图的下半部分添加了一个容器视图(第一个控制器是ViewController类)。然后我拖出一个新的视图控制器,并将控件从容器视图拖动到新控制器并选择“embed segue”(这会将视图的大小调整为与容器视图相同的大小)。该控制器的类已更改为我的子类ContainerController。然后我为2个视图创建了另外2个控制器,这些控制器将由容器控制器管理(视图需要在IB中将其大小设置为“自由形式”,以便您可以将大小设置为与容器视图相同)。这是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中唯一的代码是用于切换视图的2个按钮的IBActions。这些方法只调用容器控制器中的方法:
-(IBAction)chooseFirstController:(id)sender {
[self.childViewControllers.lastObject switchToFirst];
}
-(IBAction)chooseSecondController:(id)sender {
[self.childViewControllers.lastObject switchToSecond];
}
答案 1 :(得分:0)
您在代码中尝试做的是创建一个类,该类是多个其他类的子类,这是不可能的。如果您真的想这样做,请查看以下问题:Inherit from two classes
如果您尝试创建多个实例: CoreDataTableViewController和NRGridViewController只是类,您必须实例化以获取实际对象。 你可以实例化,例如使用
的NRGridViewControllerNRGridViewController *controller=[[NRGridViewController alloc] init];
我希望这能回答你的问题,理解你的问题有点困难。
答案 2 :(得分:0)
不使用tableViewController,而是使用普通的TableView(从故事板拖放到视图上的特定位置)。
使表格视图隐藏在按钮操作方法中。并初始化网格视图/或将隐藏的网格视图设置为NO。 (所有视图都具有隐藏在ios中的属性)
按下第2和第3个按钮时,隐藏网格视图并将tableview隐藏设置为NO。并获取coredata并将其存储在数组或字典中,或者您可以重新加载tableview。 (最初,在按下按钮2和3之前,表视图没有值。所以你可以设置一个bool属性,当你按下按钮2或3设置bool并使用bool重新加载你的tabe视图)
如果你没有得到我的解释,请回复我。