具有多个类的Storyboard UIViewController

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有多个类的Storyboard UIViewController相关的知识,希望对你有一定的参考价值。

我希望我的故事板中有一个UIViewController由几个类实例化。所以我让我的故事板中的“class”字段为空(所以默认情况下,它的UIViewController?)。然后我用“MyGenericView”填充故事板ID。

这是一些课程:

@interface ClassA: UIViewController

@interface ClassB: UIViewController

MyGenericView包含我在ClassA和ClassB中构建视图所需的所有原型。这是我如何实现我的ClassA

ClassA *myClass = (ClassA*)[storyboard instantiateViewControllerWithIdentifier:@"MyGenericView"];

最后,我的视图显示在应用程序中,但我的ClassA中的代码从未被调用过。 instantiateViewControllerWithIdentifier返回的对象是UIViewController,施放不起作用。

我不想用ClassA填充字段“class”,因为我想将这个视图重用于ClassB。但是,我不想在我的故事板中复制此视图。

Dunno,如果你觉得很清楚,我为我糟糕的英语道歉:)

谢谢!

答案

我很想找到这个问题的解决方案,但唯一可行的(我认为)是使用委托而不是子类化。

我的意思是,你可以实现3个类:ClassP,ClassC1,ClassC2;将您的故事板与实现委托协议的ClassP相关联,然后在呈现(进入prepearForSegue?)之前,您可以将segue.destinationViewController(P类型)的委托设置为您的一个类ClassC1或ClassC2,它们显然实现了协议。

示例代码(未测试):

ClassP

@protocol ClassPDelegate <NSObject>

- (void)foo;

@end

@interface ClassP : UIViewController
...
@end

ClassC1和ClassC2

#import "ClassP.h"
@property (nonatomic, weak) id <ClassPDelegate> delegate;

来电课程

...
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"mySegue"])
    {
        ClassC1 *classC1 = [[ClassC1 alloc] init];
        [(ClassP *)segue.destinationViewController setDelegate:classC1];
    }
}
...

我希望它有效! ps:我很抱歉,但是你的英语比我的好!

另一答案

只有当我用xib文件替换故事板中的几乎任何东西时,我的生活变得比以前容易得多!

另一答案

你想做什么,有什么可能并不总是一样的。转换不会神奇地将UIViewController转换为ClassA视图控制器。您需要将故事板中的类更改为ClassA或ClassB。您可以根据需要将创建的视图复制并粘贴到任意数量的其他视图控制器中。这有什么问题?

以上是关于具有多个类的Storyboard UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

在具有多个故事板的应用程序中以编程方式从 Storyboard 加载 ViewController

情节提要:为每个尺寸类的多个对象分配 IBOutlet

具有多个类的 Scrapy 抓取 div?

具有多个部分的静态分组 UITableView 的默认外观

使用 jQuery 访问具有多个类的元素

检查是不是存在具有相同类的多个元素[重复]