我在使用Swift中的子类时遇到一些问题,希望有人可以帮助我。
我有的
两个视图控制器:
仅有一些UIButton的 VC1
EffectVC ,它们根据VC1上按下的按钮进行一些动画处理
import UIKit
protocol viewAnimation {
func initialStateSet()
func finalStateSet()
}
class EffectVC: UIViewController {
@IBOutlet weak var mainImage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
self.initialStateSet()
}
override func viewDidAppear(animated: Bool) {
self.finalStateSet()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func initialStateSet() {
}
func finalStateSet() {
}
}
class GrowingEffect : EffectVC, viewAnimation {
override func initialStateSet() {
// some stuff
}
override func finalStateSet() {
// other stuff
}
}
问题
也许是一个简单的问题,但是我无法在Swift中做我想做的事情:我需要根据按下的按钮设置一个子类。
换句话说,我需要根据在VC1上按下哪个按钮,从VC1中呈现子类化的视图控制器。
例如,如果我按下第一个按钮,我想显示VC 2带有GrowingEffect 类,以使用一些自定义内容(这些内容必须根据所选按钮而改变)。
我尝试了什么
让Storyboard = UIStoryboard(名称:“Main”,包:nil)
让destinationViewController:UIViewController = storyboard.instantiateViewControllerWithIdentifier(“EffectVC”)为!成长效应
self.presentViewController(destinationViewController,动画:true,完成:无)
但是我得到了
无法转换类型为“ViewAnimationDemo.EffectVC”的值
(0x109948570)到“ViewAnimationDemo.GrowingEffect”(0x109948650)。
但我不能设置任何子类
我真正想做的是
我知道还有其他解决方案,例如不使用情节提要,但现在我确切地描述了我想做的事情,希望这是可能的:
在IB(EffectVC)中只有一个与类EffectVC相关联的视图控制器。 EffectVC类具有一些子类,例如GrowingEffect。
在我的代码中,我想用我需要的子类实例化视图控制器EffectVC:例如用类GrowingEffect 实例化IB EffectVC中的视图控制器。
我知道,如果对EffectVC的每个子类都有一个视图控制器,我可以做我想做的事,但是我不想在IB中有这么多视图控制器,因为它们相等,所以我唯一想更改的就是2种方法。
最佳答案
我认为您的设置中有些混淆。您应该有2个视图控制器,每个视图控制器都在其文件中设置,每个视图控制器及其标识符都位于情节提要中。如果GrowingEffect
继承自EffectVC
是可以的。
您当前对as! GrowingEffect
所做的操作实际上是在尝试将您从将UIViewController
调用为instantiateViewControllerWithIdentifier("EffectVC")
所获得的GrowingEffect
实例进行转换。这将不起作用,因为它的类型为EffectVC
。
相反,如果按下按钮X,则需要调用instantiateViewControllerWithIdentifier("EffectVC")
,如果按下按钮Y,则需要调用instantiateViewControllerWithIdentifier("GrowingEffect")
。
编辑
如果使用情节提要,则必须使用instantiateViewControllerWithIdentifier
实例化视图控制器。但是,如果情节提要中存在GrowingEffect
实例,则只能得到它。
创建后,无法将EffectVC
实例“投射”到GrowingEffect
。
因此,这里有两种可能性:
instantiateViewControllerWithIdentifier
实例化所需的视图控制器。 UINavigationController
的pushViewController
方法进行呈现。 关于ios - 在Swift中从另一个 View Controller 呈现子类化的 View Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29580133/