Swift 故事板不';是否不包含标识符错误的视图控制器?
我试图在viewcontroller上演示一个编程生成的viewcontroller,但我不知道如何生成这样一个生成的viewcontroller的IDSwift 故事板不';是否不包含标识符错误的视图控制器?,swift,xcode,Swift,Xcode,我试图在viewcontroller上演示一个编程生成的viewcontroller,但我不知道如何生成这样一个生成的viewcontroller的ID class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func didTapButton(_ sender: Any) {
let controller = storyboard!.instantiateViewController(withIdentifier: "SecondController")
present(controller, animated: true)
}
}
从下面的代码中可以看出,我有一个基本视图控制器“ViewController”,如果我单击一个按钮(didTapButton),我希望显示一个编程生成的视图控制器(SecondViewController)。
虽然我不能设置第二个视图控制器的名称,但我甚至不能执行代码——InstanceEviewController(带标识符:“SecondController”)
class SecondViewController: UIViewController {
private var customTransitioningDelegate = TransitioningDelegate()
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: "SecondController", bundle: nibBundleOrNil)
configure()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
configure()
}
}
如何设置第二个视图控制器的ID?如果这不是应该做的,我还能做些什么呢?编程创建的vcs不需要任何标识符,只需执行即可
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .green
}
}
像
@IBAction func didTapButton(_ sender: Any) {
let vc = SecondViewController()
present(vc, animated: true)
}
编辑:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .green
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
let vc2 = SecondViewController()
vc2.providesPresentationContextTransitionStyle = true
vc2.definesPresentationContext = true
vc2.modalPresentationStyle = .overCurrentContext
self.present(vc2, animated: true)
}
}
}
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let v = UIView()
v.backgroundColor = .red
view.addSubview(v)
v.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
v.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
v.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
v.widthAnchor.constraint(equalToConstant:200),
v.heightAnchor.constraint(equalToConstant:200)
])
}
}
instantialeviewcontroller
用于实例化给定情节提要中定义的内容。因此,要么通过xcode在故事板中命名,要么必须做其他事情。例如,从代码实例化对象,即让c=SecondViewController()(使用适当的参数)。您正在尝试混合不同的方法来实例化对象。非常感谢您的快速回复。尽管如此,我读了一篇文章,其中使用intantiateViewController使viewcontroller显示为自定义大小,所以我尝试使用它。它仍然能够使用您的方式自定义新视图控制器的大小吗?谢谢!这是非常直观的方式。