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