gpt4 book ai didi

ios - Swift 在主 UIViewController 的容器中嵌入 UIView - 如何从 1 个嵌入 UIView 转换到下一个嵌入 UIView

转载 作者:行者123 更新时间:2023-11-30 13:11:26 32 4
gpt4 key购买 nike

我可以通过简单地将容器拖动到新的 UIView 来成功地将第一个 UIView 嵌入到容器中,但是要添加过渡 View ,我无法在按键输入事件上用新 View 替换当前的嵌入 View 。

这是我的代码:

import Foundation
import UIKit

class MainViewController: UIViewController {

@IBOutlet var overlayView: UIView!

@IBOutlet var logoImage: UIImageView!

@IBOutlet var overlayUIView: UIView!

private var embeddedViewController: ViewController!
private var birthdayPickerController: BirthdayPickerController!

required init(coder aDecoder: NSCoder) {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

self.birthdayPickerController = storyBoard.instantiateViewControllerWithIdentifier("birthdayPickerController") as! BirthdayPickerController

super.init(coder: aDecoder)!
}

override func viewDidLoad() {
super.viewDidLoad()

view.backgroundColor = UIColor(patternImage: UIImage(named: "lasvegas.jpg")!)

overlayView.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.3)

self.modalPresentationStyle = .OverCurrentContext

logoImage.image = UIImage(named: "philia");

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

self.embeddedViewController = storyBoard.instantiateViewControllerWithIdentifier("viewController") as! ViewController


self.embeddedViewController.setOverlayUIView(overlayUIView)
}



let viewControllerIdentifiers = ["viewController", "birthdayPickerController"] // storyboard identifiers for the child view controllers

/*
@IBAction func didChangeValue(sender: UISegmentedControl) {

let newController = (storyboard?.instantiateViewControllerWithIdentifier(viewControllerIdentifiers[sender.selectedSegmentIndex]))! as UIViewController

let oldController = childViewControllers.last! as UIViewController

oldController.willMoveToParentViewController(nil)
addChildViewController(newController)
newController.view.frame = oldController.view.frame

transitionFromViewController(oldController, toViewController: newController, duration: 0.25, options: .TransitionCrossDissolve, animations:{ () -> Void in
// nothing needed here
}, completion: { (finished) -> Void in
oldController.removeFromParentViewController()
newController.didMoveToParentViewController(self)
})
}
*/
}


import UIKit
import Foundation

class ViewController: UIViewController, UITextFieldDelegate{

/*
* Reference to the container in MainViewController
* This is where all views are rendered
*/
private var overlayUIView: UIView!

@IBOutlet var backgroundImageView: UIView!

@IBOutlet var anotherTextLabel: UITextView!

@IBOutlet var textField: UITextField!

func setOverlayUIView(overlayView: UIView) {
overlayUIView = overlayView
}

func textFieldShouldReturn(textField: UITextField) -> Bool {
self.view.endEditing(true)
onEnter(textField)
return false
}

@IBAction func onEnter(sender: UITextField) {
let msgEntered = textField.text

anotherTextLabel.text = "Hi \(msgEntered!)!"


let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

let birthdayPickerController = storyBoard.instantiateViewControllerWithIdentifier("birthdayPickerController") as! BirthdayPickerController

birthdayPickerController.name = textField.text!

overlayUIView.willRemoveSubview(self.view)
overlayUIView.addSubview(birthdayPickerController.view)

/*
self.willMoveToParentViewController(nil)



self.parentViewController?.addChildViewController(birthdayPickerController)

birthdayPickerController.view.frame = self.view.frame

transitionFromViewController(self, toViewController: birthdayPickerController, duration: 0.25, options: .TransitionCrossDissolve, animations: {() -> Void in}, completion: {(finished) -> Void in
self.removeFromParentViewController()
birthdayPickerController.didMoveToParentViewController(self.parentViewController)
})
*/

//self.navigationController?.pushViewController(thirdViewController, animated: true)

//self.parentViewController!.performSegueWithIdentifier("birthdayPickerController", sender: self)

}

override func viewDidLoad() {
super.viewDidLoad()

UIColor.blackColor().colorWithAlphaComponent(0).CGColor

view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.3)

self.textField.delegate = self;

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

/*
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if segue.identifier == "birthdayPickerController" {
let birthdayPickerController = segue.destinationViewController as! BirthdayPickerController

birthdayPickerController.name = textField.text!
}
}
*/

}

最佳答案

我解决了这个问题。我使用委托(delegate)将父级传递给嵌入式 Controller ,并让子 Controller 使用新 Controller 类对父级进行回调,然后父类将旧 Controller 换成新 Controller 。

关于ios - Swift 在主 UIViewController 的容器中嵌入 UIView - 如何从 1 个嵌入 UIView 转换到下一个嵌入 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687325/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com