发生 IBAction 时,Swift addsubview 和应用程序崩溃
Posted
技术标签:
【中文标题】发生 IBAction 时,Swift addsubview 和应用程序崩溃【英文标题】:Swift addsubview and app crash when IBAction occur 【发布时间】:2014-07-26 09:49:26 【问题描述】:我只是将其他视图控制器的子视图添加到我当前的视图控制器(由 tableview 组成)。当用户按下行时,我添加子视图。
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!)
var vc: alertVC = alertVC()
vc.setUpData(Helper.Stored.alertViewWithPlacehlder)
self.view.addSubview(vc.view)
在那之后,在那个alertVC中,有IBAction。当我按下那个按钮时,我的应用程序崩溃了。我也不知道为什么。我该怎么办?调试中也没有显示任何内容。
@IBAction func cancel(sender: AnyObject)
NSLog("cancel");
编辑:下面是我在 alertVC 中的代码,哪个视图将添加到我当前的视图中。当我添加带有加载笔尖的子视图时,我收到了这个错误。我该怎么办?
* 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[<_ttc13fastphonecard9contactvc> setValue:forUndefinedKey:]:此类与键 vwTwoBtnWithTitle 的键值编码不兼容。”
import UIKit
class alertVC: UIViewController
var alertType: NSString = NSString()
@IBOutlet var vwTwoBtnWithTitle: UIView
override func viewDidLoad()
super.viewDidLoad()
setUpInterface()
// Do any additional setup after loading the view.
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
class func getView() -> alertVC
return NSBundle.mainBundle().loadNibNamed("alertVC", owner: nil, options: nil)[0] as alertVC
func setUpInterface()
self.view.backgroundColor = UIColor (white: 1, alpha: 0.5)
if(alertType == Helper.Stored.alertViewWithPlacehlder)
addVWTwoBtnWithTitle()
func setUpData(input : NSString)
alertType = input
func addVWTwoBtnWithTitle()
vwTwoBtnWithTitle.frame = CGRectMake(20, 190, 280, 160);
vwTwoBtnWithTitle.layer.borderWidth = 1
vwTwoBtnWithTitle.layer.borderColor = UIColor.blackColor().CGColor
vwTwoBtnWithTitle.layer.cornerRadius = 5
self.view.addSubview(vwTwoBtnWithTitle)
@IBAction func cancel(sender: AnyObject)
NSLog("cancel");
【问题讨论】:
谢谢。我已从 SWIFT 更改为 Swift 【参考方案1】:您不应该这样做。将其他 viewControllers
的视图添加为子视图是非常错误的做法。每个 ViewController 都应该管理自己的视图和自己的生命周期。
有两种方法可以做到:
1) 在两个视图控制器中使用Xib
获取您需要的视图,并在需要时加载xib
。使用properties
来回传递数据并委托。
2)使用ViewController Containers
。使用viewControllers会更合适,它们管理和结构化代码很好。
每个 viewController 都应该管理自己的视图,如果您需要另一个 viewController,您应该展示或导航该 ViewController(如果相关)。每个 ViewController 都有自己的生命周期。
适用于 Xib
创建新的 Xib 并创建新的 file
在您的情况下是视图的子类 AlertView
比加载视图
重要:转到 xib -> Identity Inspector -> Custom Class 部分并将Class
设置为AlertView
var nib:Array = NSBundle.mainBundle().loadNibNamed("View", owner: self, options: nil) //View is name of xib
var view = nib[0] as? AlertView
self.view.addSubview(view) //this will add subview of current viewController
【讨论】:
谢谢。我这样添加。 var nib:Array = NSBundle.mainBundle().loadNibNamed("alertVC", owner: self, options: nil) var vc = nib[0] as? alertVC self.view.addSubview(vc?.view)。但是,如我的问题所示(在编辑中),我遇到了错误。我该怎么办? 哦..我做错了。我喜欢这样。然后,没关系。 var vc = alertVC(nibName: "alertVC", bundle: nil) vc.setUpData(Helper.Stored.alertViewWithPlacehlder) self.view.addSubview(vc.view)。 在我的 alertVC 中,我也需要写这个。 init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 编辑答案:将alertVC(它应该是视图的子类)作为类和self.view.addSubview(vc)放在xib中。寻找编辑答案以上是关于发生 IBAction 时,Swift addsubview 和应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
使用 IBAction 将数据传递到另一个视图控制器而无需 segue swift
Swift - 从 IBAction 按钮调用 SKAction(在类中)
Swift:IBAction 在单击按钮后将图像放入 UIImageView