iOS中多个UIView的UIView继承

iOS中多个UIView的UIView继承,ios,swift,uiview,uiviewcontroller,storyboard,Ios,Swift,Uiview,Uiviewcontroller,Storyboard,我正在尝试构建一个简单的iOS应用程序,它可以简单地使用不同数量的边(d20、d12等)掷骰子 我想创建一个视图,我将在同一个UIViewController中重复使用多次,如下所示:(唯一改变的是#边) 我搞不懂的是,如何在故事板中正确创建UI元素,而不简单地复制和粘贴ContainerView的嵌入对象,以获得不同的侧面数 @interface DieViewController … @property (nonatomic) NSInteger numberOfSides; … @end

我正在尝试构建一个简单的iOS应用程序,它可以简单地使用不同数量的边(d20、d12等)掷骰子

我想创建一个视图,我将在同一个UIViewController中重复使用多次,如下所示:(唯一改变的是#边)

我搞不懂的是,如何在故事板中正确创建UI元素,而不简单地复制和粘贴ContainerView的嵌入对象,以获得不同的侧面数

@interface DieViewController
…
@property (nonatomic) NSInteger numberOfSides;
…
@end

有没有一种简单的方法可以正确地将其细分?我是iOS故事板新手,尝试使用OO原则。

我不清楚你的问题,但我有一个想法

首先,您可以立即使用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];

因此,您有一个
DieViewController
,但需要不同的实例具有不同的边数

@interface DieViewController
…
@property (nonatomic) NSInteger numberOfSides;
…
@end
问题是如何向每个包含的实例传递适当数量的边。这就是嵌入式segue的用武之地。在情节提要中,将情节提要嵌入序列标识符设置为唯一的(我将使用
6SidedDie
)。最后,在
ViewController
中添加一个
-prepareforsgue: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;
        }
    }
}

更新

您可以使用
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
以查看这是哪种类型的模具。

这看起来是使用UITableView的理想情况。为什么不让您的模具视图控制器足够智能,以处理任何所需数量的侧边?这样,您可以在实例化时告诉它有多少个面,并且它可以配置自己的接口。这是完全有意义的。但是如何将控件绑定到DieViewController?在我链接到的图像中,我有4个容器视图,它们都链接到具有4个对象(2个标签、按钮和步进器)的同一个UIView。如何将这4个对象绑定到视图控制器?这对循环很有意义,谢谢。然后我是否需要手动绑定代码中的对象,而不是在故事板上进行绑定?我认为是否需要手动连接标签、步进器和按钮的绑定?您只需要创建DieViewController一次。使用上面的代码创建所需的即时数,然后调用
方法更改ideproperty
更改标签中的文本。