我只是将其他视图控制器的子视图添加到我当前的视图控制器(由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 0x17d53110> 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");
}
}
答案 0 :(得分:4)
你不应该这样做。将其他viewControllers
的视图添加为subView是非常错误的做法。每个ViewController都应该管理自己的视图和自己的LifeCycle。
有两种方法可以做:
1)在两个viewControllers中使用Xib
视图,并加载xib
所需的视图。使用properties
和委托来回传递数据。
2)使用ViewController Containers
。更适合使用viewControllers,他们可以很好地管理和构建代码。
每个viewController都应该管理自己的视图,如果你需要另一个viewController,你应该呈现或导航ViewController,如果这是相关的。每个ViewController都有自己的生命周期。
对于Xib
创建新的Xib并创建新的file
,它是您案例AlertView
中视图的子类
加载视图
重要:转到xib - >身份检查员 - >自定义类部分,并将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