您如何以编程方式添加 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】:
为了使用UIStoryboard
的instantiateViewControllerWithIdentifier
方法,您必须设置视图控制器的标识符以匹配您作为标识符传递的字符串。
情节提要上的视图控制器可以通过身份检查器设置其标识符(与您为视图控制器设置自定义类的位置相同):
在“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