【发布时间】:2015-06-17 06:38:06
【问题描述】:
我在 Swift 中使用子类有一些问题,希望有人能帮助我。
我有什么
两个视图控制器:
VC1只有一些 UIButtons
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 中的子类视图控制器。
例如,如果我按下 第一个按钮,我想显示带有 GrowingEffect 类的 VC 2 以使用一些自定义内容(这些内容必须根据所选内容进行更改按钮)。
我尝试了什么
-
使用 IBAction 创建我的子类 VC2 并显示它
让 storyboard = UIStoryboard(name: "Main", bundle: nil)
让 destinationViewController : UIViewController = storyboard.instantiateViewControllerWithIdentifier("EffectVC") as!成长效应
self.presentViewController(destinationViewController, 动画: true, 完成: nil)
但我得到了
无法转换“ViewAnimationDemo.EffectVC”类型的值 (0x109948570) 到 'ViewAnimationDemo.GrowingEffect' (0x109948650)。
- 使用 PrepareForSegue
但我不能设置任何子类
我真正想做的事
我知道还有一些其他的解决方案,比如不使用故事板,但现在我准确地描述了我想要做的事情,希望这是可能的:
在 IB (EffectVC) 中只有一个视图控制器与类 EffectVC 相关联。 EffectVC 类有一些子类,如GrowingEffect。
在我的代码中,我想用我需要的子类来实例化视图控制器 EffectVC:例如在 IB EffectVC 中用类GrowingEffect 实例化视图控制器。
我知道,如果我为 EffectVC 的每个子类都有一个视图控制器,我可以做我想做的事,但我不希望 IB 中有这么多视图控制器,因为它们是相等的,我唯一想要改变的是 2方法。
【问题讨论】:
标签: ios swift uiviewcontroller subclass viewcontroller