具有多个类的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的主要内容,如果未能解决你的问题,请参考以下文章