1

我使用PopoverController,我想擺脫背景陰影。蘋果表示,要繼承UIPopoverBackgroundView和override class var wantsDefaultContentAppearance: Bool { get }Swift iOS - 如何將UIPopoverBackgroundView類中的方法連接到另一個類中的PopoverController?

https://developer.apple.com/documentation/uikit/uipopoverbackgroundview/1619357-wantsdefaultcontentappearance

返回false我子類它和布爾設置爲false但陰影仍然顯示。我如何將這個子類連接到我在我的LogoutClass的Actionsheet中使用的PopoverController?

UIPopoverBackgroundView子類:

class PopoverBackgroundView: UIPopoverBackgroundView { 

override class var wantsDefaultContentAppearance: Bool { 
     get { 
      return false 
     } 
    } 
} 

LogoutController:

class LogoutController:UIViewController{ 

fileprivate func logOff(){ 

let actionSheet = UIAlertController(title: nil, message: "Logging out?", preferredStyle: .actionSheet) 

let logout = UIAlertAction(title: "Log Out", style: .default){ 
      (action) in 
//bla bla bla 
} 

actionSheet.addAction(logout) 

if let popoverController = actionSheet.popoverPresentationController{ 
      popoverController.sourceView = view 
      guard let window = UIApplication.shared.keyWindow else { return } 
      window.backgroundColor = .clear 
      popoverController.sourceRect = CGRect(x:window.bounds.midX, y:window.bounds.midY, width:0, height:0) 
      popoverController.permittedArrowDirections = [] 

     } 
present(actionSheet, animated: true, completion: nil) 
} 
} 

回答

3

你必須設置你的UIPopoverPresentationController實例的popoverBackgroundViewClass財產,像這樣:

目標C:

popoverController.popoverBackgroundViewClass = [PopoverBackgroundView class]; 

夫特

popoverController?.popoverBackgroundViewClass = PopoverBackgroundView.self 

作爲每蘋果文檔:

此屬性的默認值是零,這將導致呈現控制器使用默認酥料餅的外觀。將此屬性設置爲非nil值會導致表示控制器使用指定的類來繪製彈出窗口的背景內容。您指定的類必須是 UIPopoverBackgroundView 的子類。

+0

感謝您的幫助。我嘗試過,但影子仍然存在,所以我不確定它是否有效。 –

+0

它仍然不能正常工作,但你的答案是正確的。背景類實現有問題。不過謝謝 –

相關問題