iOS中多个UIView的UIView继承
我正在尝试构建一个简单的iOS应用程序,它可以简单地使用不同数量的边(d20、d12等)掷骰子 我想创建一个视图,我将在同一个UIViewController中重复使用多次,如下所示:(唯一改变的是#边) 我搞不懂的是,如何在故事板中正确创建UI元素,而不简单地复制和粘贴ContainerView的嵌入对象,以获得不同的侧面数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
@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
更改标签中的文本。