Как добавить UIView, созданный в раскадровке, как всплывающее окно в Swift?

Я сделал следующее: 1. Перетащил UIView, чтобы поместить его на ленту ViewController Перетащил UIView, чтобы поместить его на ленту ViewController

  1. Создал пользовательский класс UIView и добавил выходы в поля представления "Редактировать представление профиля":

импортировать UIKit

класс EditProfileView: UIView {

let globalDataHandler = GlobalDataHandler.sharedInstance

@IBOutlet weak var firstNameTextField: UITextField!
@IBOutlet weak var lastNameTextField: UITextField!
@IBOutlet weak var userNameTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
@IBAction func saveEditButton(sender: AnyObject) {
}
@IBAction func cancelEditButton(sender: AnyObject) {
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
    // Drawing code
}
*/

}

  1. Предоставлен класс 'EditProfileView' в качестве настраиваемого класса для представления 'Редактировать представление профиля' в Storyboard.

  2. Создан объект для класса 'EditProfileView' в ProfileViewController и добавлено представление 'Редактировать представление профиля' в основное представление при нажатии кнопки редактирования в < em>Профилвиевконтроллер.

класс ProfileViewController: UIViewController {

let profileView = EditProfileView()

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

@IBAction func editProfileButton(sender: AnyObject) {
    profileView.firstNameTextField.text = "First Name"
    profileView.lastNameTextField.text = "Last Name"
    profileView.userNameTextField.text = "User Name"
    profileView.emailTextField.text = "Email"
    let testFrame : CGRect = CGRectMake(50,100,300,300)
    profileView.frame = testFrame
    self.view.addSubview(profileView)
}

}

Но представление "Редактировать представление профиля" не отображается в ProfileViewController. Пожалуйста помоги.


person Shashank    schedule 05.07.2016    source источник
comment
Почему бы вам просто не сделать profileView и IBOutlet вида, который вы перетащили в раскадровку, выбрав «Редактировать вид профиля» в структуре документа и управляя перетаскиванием в свой ProfileViewController? Инициализация его в таком коде, как EditProfileView(), не будет иметь желаемого эффекта, потому что есть переопределенный инициализатор, который настраивает ваши подпредставления.   -  person beyowulf    schedule 05.07.2016


Ответы (1)


Вы должны связать свой UIView и свой вид (должен быть отдельный UIViewController) в файле Xib.

profileView = storyboard.instantiateViewControllerWithIdentifier("ProfileViewController")

У вас должен быть UIPresentationController для вашего ProfileVC

class ProfilePresentationController : UIPresentationController {
    override func frameOfPresentedViewInContainerView() -> CGRect {
        return CGRect(x: (presentingViewController.view.frame.width / 2.0) - 150.0, y: (presentingViewController.view.frame.height / 2.0) - 100.0, width: 300.0, height: 200.0)
    }
}

Ваш EditProfileView должен реализовать следующий делегат:

UIViewControllerTransitioningDelegate

следующие свойства вашего profileView также должны быть установлены на:

profileView.modalPresentationStyle = UIModalPresentationStyle.Custom
profileView.transitioningDelegate = self

После этого вы можете реализовать требуемый метод делегата

func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController, sourceViewController source: UIViewController) -> UIPresentationController? {
        return ProfilePresentationController(presentedViewController: presented, presentingViewController: presenting)
}
person FouZ    schedule 05.07.2016