[英]UIView inheritance for multiple UIView in iOS
我正在尝试构建一个简单的iOS应用,该应用将简单地将骰子以不同数量的面(d20,d12等)掷骰子
我想创建一个视图,将在同一个UIViewController中多次使用该视图,如下所示: http : //cl.ly/image/2s30353F3V1K (唯一更改的是边数)
我不知道的是如何在情节提要中正确创建UI元素,而不必简单地为每个不同数量的面复制并粘贴ContainerView的嵌入对象。
有一个简单的方法可以正确地对此进行子类化吗? 我是iOS故事板的新手,正在尝试使用OO原则。
因此,您有一个DieViewController
,但是您需要不同的实例来具有不同的边数。
@interface DieViewController
…
@property (nonatomic) NSInteger numberOfSides;
…
@end
问题是如何将适当数量的边传递给每个包含的实例。 这就是嵌入segue的来源。在情节6SidedDie
,将情节6SidedDie
embed segue标识符设置为唯一的名称(我将使用6SidedDie
)。 最后,在ViewController
添加-prepareForSegue:sender:
@@implementation ViewController
…
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"6SidedDie"]) {
DieViewController *dieViewController = segue.destinationViewController;
dieViewController.numberOfSides = 6;
}
}
…
@end
当然,您可以将其混合起来以允许大量骰子。 这是可以处理标识符6SidedDie
和10SidedDie
。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier hasSuffix:@"Die"]) {
DieViewController *dieViewController = segue.destinationViewController;
if ([segue.identifier hasPrefix:@"6Sided"]) {
dieViewController.numberOfSides = 6;
} else if ([segue.identifier hasPrefix:@"10Sided"]) {
dieViewController.numberOfSides = 10;
}
}
}
UPDATE
您可以使用self.viewControllers
数组访问DieViewController
实例中的内容。
DieViewController *dieViewController = self.viewControllers[0]; // The first die view controller
if (dieViewController.numberOfSides == 6) {
// This is the six sided die.
}
注意: self.viewControllers
将不被订购。 您将需要检查numberOfSides
以查看这是哪种类型的芯片。
我不清楚您的问题,但我有个主意
首先,您将获得一个UIViewController实例
YourViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"Identifier"];
[vc methodToChangeTheSideProperty:(NSString *)side];
CGRect frame = vc.view.frame;
//change frame of the view as you want
...
...
vc.view.frame = frame;
然后,将控制器的视图添加到要显示它的容器中
[yourViewContainer addSubview:vc.view];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.