繁体   English   中英

iOS中多个UIView的UIView继承

[英]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

当然,您可以将其混合起来以允许大量骰子。 这是可以处理标识符6SidedDie10SidedDie

- (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM