Ios 优化代码:迭代UIViewcontroller的子类
我是swift的新手,所以我有一个关于我试图创建的代码的基本问题 我有一个Ios 优化代码:迭代UIViewcontroller的子类,ios,iphone,swift,loops,Ios,Iphone,Swift,Loops,我是swift的新手,所以我有一个关于我试图创建的代码的基本问题 我有一个UIScrollView,我想添加多个UIViewController 这是我最初使用的代码: let obj1 = self.storyboard?.instantiateViewController(withIdentifier: "Page1VC") as! Page1VC let obj2 = self.storyboard?.instantiateViewController(withIdenti
UIScrollView
,我想添加多个UIViewController
这是我最初使用的代码:
let obj1 = self.storyboard?.instantiateViewController(withIdentifier: "Page1VC") as! Page1VC
let obj2 = self.storyboard?.instantiateViewController(withIdentifier: "Page2VC") as! Page2VC
let obj3 = self.storyboard?.instantiateViewController(withIdentifier: "Page3VC") as! Page3VC
let obj4 = self.storyboard?.instantiateViewController(withIdentifier: "Page4VC") as! Page4VC
let obj5 = self.storyboard?.instantiateViewController(withIdentifier: "Page5VC") as! Page5VC
self.containerScrollView.addSubview(obj2.view)
obj2.willMove(toParentViewController: self)
self.addChildViewController(obj2)
self.containerScrollView.addSubview(obj1.view)
obj1.willMove(toParentViewController: self)
self.addChildViewController(obj1)
self.containerScrollView.addSubview(obj3.view)
obj3.willMove(toParentViewController: self)
self.addChildViewController(obj3)
self.containerScrollView.addSubview(obj4.view)
obj4.willMove(toParentViewController: self)
self.addChildViewController(obj4)
self.containerScrollView.addSubview(obj5.view)
obj5.willMove(toParentViewController: self)
self.addChildViewController(obj5)
obj1.view.frame.origin = CGPoint.init(x: 0, y: 0)
obj2.view.frame.origin = CGPoint.init(x: UIScreen.main.bounds.width, y: 0)
obj3.view.frame.origin = CGPoint.init(x: 2*UIScreen.main.bounds.width, y: 0)
obj4.view.frame.origin = CGPoint.init(x: 3*UIScreen.main.bounds.width, y: 0)
obj5.view.frame.origin = CGPoint.init(x: 4*UIScreen.main.bounds.width, y: 0)
我希望我们都能同意,这一准则不是很好和/或很灵活。我想为我的UIScrollView
实现任意数量的页面,因此我得出结论,为此我需要一个循环
我最终得到了以下代码:
repeat {
let vc = (self.storyboard?.instantiateViewController(withIdentifier: "Page\(x+1)VC"))!
obj.append(vc)
self.containerScrollView.addSubview(obj[x].view)
obj[x].willMove(toParentViewController: self)
self.addChildViewController(obj[x])
obj[x].view.frame.origin = CGPoint(x: (CGFloat(x))*UIScreen.main.bounds.width, y: 0)
x += 1
print("Page \(x) sucessfully initialized")
} while (x < segmentControl.numberOfSegments)
我用粗体标出了这些变化。
该代码显然不起作用,因为无法将UIViewController
的类型声明为as!第**\(x+1)页)**VC
所有这些都引出了我的问题:我是否可以使用循环遍历不同的子类,如长版本代码中所述?或者我必须求助于我的代码的长版本吗?如果你总是在
setup()
中做“类似的事情”,你可以使用一个协议,每个VC都会遵守。否则,您可以创建所有VC元素,对它们进行设置,然后将它们放入一个数组并循环该数组。谢谢您的回复。这也是我的想法,但它将使我无法创建任意数量的UIViewController
。我通常可以有一个函数,传入一个数字,然后根据该数字创建x个UIViewController
,但我需要先编写非循环代码。我会试试的,谢谢!
repeat {
let vc = (self.storyboard?.instantiateViewController(withIdentifier: "Page\(x+1)VC"))! as! Page**\(x+1)**VC
**vc.setup = setup**
obj.append(vc)
self.containerScrollView.addSubview(obj[x].view)
obj[x].willMove(toParentViewController: self)
self.addChildViewController(obj[x])
obj[x].view.frame.origin = CGPoint(x: (CGFloat(x))*UIScreen.main.bounds.width, y: 0)
x += 1
print("Page \(x) sucessfully initialized")
} while (x < segmentControl.numberOfSegments)