2017-02-21 12 views
0
let obj = MainStoryboard().instantiateViewController(withIdentifier: "SomeVC") as! SomeVC 
obj.delegate = self 

obj.modalPresentationStyle = .popover 
obj.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0) 
self.present(obj, animated: true, completion: nil) 

При настройке контрольных точек отладчик идет до последней строки. После этого он напрямую переходит на AppDelegate класс первой линии.Swift3: сбой при предъявлении pop over

Я правильно поставил исключение. Где я могу ошибаться? Связано ли это с sourceView для popoverPresentationController? Я не уверен.

Что я хочу сделать, это установить popoverPresentationController в центр. Любая помощь?

EDIT: Я добавил sourceView к коду как следующий & теперь работает:

obj.popoverPresentationController?.sourceView = self.view 
obj.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 1, height: 1) 

Однако, это не в центре экрана. Поместите снимок экрана для справки. Как мне добраться до центра и удалить стрелку направления?

enter image description here

+1

Любые отчеты о сбоях? – raki

+0

В консоли нет. За исключением: 'libC++ abi.dylib: завершение с неперехваченным исключением типа NSException' –

+1

показать полный отчет о сбое –

ответ

1

Вы должны использовать sourceView в сочетании с sourceRect обеспечить точку привязки для поп-музыки в течение, как следующее:

obj.popoverPresentationController?.sourceView = self.view 
obj.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 1, height: 1) 

Кроме того, если вы не хотите, узловую точку стрелка должна быть там, а затем использовать:

obj.popoverPresentationController?.permittedArrowDirections = .init(rawValue: 0) 

Это сделает ваше всплывающее окно в центре без стрелки/якорной точки.

1
Try this: 
    let obj = MainStoryboard().instantiateViewController(withIdentifier: "SomeVC") as! SomeVC 
    obj.delegate = self 
    obj.modalPresentationStyle = .overCurrentContext 
    self.navigationController?.present(obj, animated: false, completion: { 
          }) 
+0

Это не сбой, но всплывающее окно полноэкранное, и я хочу, чтобы он был размером 682 x 450. Так что вроде не работает. –

+0

Я не знаю, возможно ли это. Попробуйте изменить ограничения objViewcontroller, чтобы он был представлен требуемому размеру. – Anuraj

2

После выполнения следующих изменений кода я смог заставить его работать.

let obj = MainStoryboard().instantiateViewController(withIdentifier: "SomeVC") as! SomeVC 
obj.delegate = self 

obj.modalPresentationStyle = .popover 
obj.popoverPresentationController?.permittedArrowDirections = .init(rawValue: 0) 
obj.popoverPresentationController?.sourceView = self.view 
obj.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 1, height: 1) 
self.present(obj, animated: true, completion: nil) 

Спасибо всем за ваши усилия.