您如何以编程方式添加 UI/视图控制器?

Posted

技术标签:

【中文标题】您如何以编程方式添加 UI/视图控制器?【英文标题】:How do you programmatically add UI / view controllers? 【发布时间】:2015-04-26 23:54:17 【问题描述】:

我正在尝试在点击 UIView 时加载 ViewController,但我不断收到错误

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“Storyboard () 不包含标识符为“CameraVC3”的视图控制器

我认为这是因为没有将 ViewController 正确添加到我的情节提要中,所以我尝试以编程方式进行操作,但仍然无法识别。

视图控制器

class ViewController: UIViewController, UIScrollViewDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate

    let rect1 = CGRectMake(100, 60, 40, 60)
    let captureButton2 = UIView(frame: rect1)
    captureButton2.backgroundColor = UIColor.blueColor()
    scrollView.addSubview(captureButton2)
    captureButton2.addGestureRecognizer(UITapGestureRecognizer(target: self,
       action: Selector("didTapImageView:")))

    func didTapImageView(tap: UITapGestureRecognizer)

         let captureDetails = storyboard!.instantiateViewControllerWithIdentifier("CameraVC3")! as! CameraVC3
         presentViewController(captureDetails, animated: true, completion: nil)


CameraViewController

class CameraVC3: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate

    override func viewWillAppear(animated: Bool) 
    println("camera vc3 view will appear")
    super.viewWillAppear(animated)

    view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "capture:"))


func capture() 
     if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)
    var imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = UIImagePickerControllerSourceType.Camera;
    imagePicker.mediaTypes = [kUTTypeImage]
    imagePicker.allowsEditing = false
    self.presentViewController(imagePicker, animated: true, completion: nil)

【问题讨论】:

另一种处理这一切的方法是使用 segues。在界面构建器中连接视图控制器并命名segue。然后你可以使用self.performSegueWithIdentifier("yourSegueName", sender: self) 【参考方案1】:

为了使用UIStoryboardinstantiateViewControllerWithIdentifier 方法,您必须设置视图控制器的标识符以匹配您作为标识符传递的字符串。

情节提要上的视图控制器可以通过身份检查器设置其标识符(与您为视图控制器设置自定义类的位置相同):

在“Storyboard ID”框中,只需填写一个您想用作此视图控制器身份的字符串。在这种情况下,将CameraVC3 放入该框中。

【讨论】:

感谢您的及时回复!但是如何添加多个视图控制器呢?一旦我将Class 框从ViewController 更改为CameraVC3,我的应用程序将不再加载ViewController,它会在加载屏幕上停止。 是的。所以从对象库中再拖一个:i.imgur.com/tHBQdct.png 你不应该改变类,你应该改变唯一标识符。而且您可能希望在故事板中定义多个视图控制器。 不,不是。实际上没有任何等价性......而且在 StackExchange cmets 中也没有简单的方法来解释它。 Ray Wenderlich 应该有很好的故事板教程。我会解决这些问题的。【参考方案2】:

随行:

let captureDetails = storyboard!.instantiateViewControllerWithIdentifier("CameraVC3")! as! CameraVC3

您需要为情节提要中的 ViewController 提供一个标识符名称“CameraVC3”。您可以在身份检查器中的字段Storyboard ID 中进行设置。

【讨论】:

以上是关于您如何以编程方式添加 UI/视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式从模态视图控制器切换父选项卡

如何以编程方式将自定义 uiview 添加到视图控制器 SWIFT

PageMenu 如何动态(以编程方式)添加视图控制器?

如何在 iOS 中以编程方式从基本 UIViewController 向我的所有视图控制器添加视图

如何以编程方式将视图控制器嵌入到导航视图控制器中

如何完全以编程方式添加 UINavigationBar?