iPad에서 UIAlertController의 actionSheet사용시 발생하는 오류
오류 메세지
'Your application has presented a UIAlertController (<UIAlertController: xxx>) of style UIAlertControllerStyleActionSheet. The modalPresentationStyle of a UIAlertController with this style is UIModalPresentationPopover. You must provide location information for this popover through the alert controller's popoverPresentationController. You must provide either a sourceView and sourceRect or a barButtonItem. If this information is not known when you present the alert controller, you may provide it in the UIPopoverPresentationControllerDelegate method -prepareForPopoverPresentation.'
영어를 해석해보면 actionSheet의 모달스타일은 UIModalPresentationPopover라고 설명을 해주면서 UIModalPresentationPopover을 사용 할 때는 barButtonItem또는 팝업에 대한 위치를 설정해줘야 된다고 명시 되어 있습니다.
해결 방법
해결방법은 만약 앱이 iPhone과 iPad를 같이 지워하는 앱이라면 디바이스에 따라 분개해주고 iPad만 사용 가능하다면 따로 설정은 안 해주셔도 됩니다.
위치를 정해주는 방법
if UIDevice.current.userInterfaceIdiom == .pad { //디바이스 타입이 iPad일때 if let popoverController = alertController.popoverPresentationController { // ActionSheet가 표현되는 위치를 저장해줍니다. popoverController.sourceView = self.view popoverController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0) popoverController.permittedArrowDirections = [] self.present(alertController, animated: true, completion: nil) } } else { self.present(alertController, animated: true, completion: nil) }
UIBarButtonItem에 추가해주는 방법
if UIDevice.current.userInterfaceIdiom == .pad { //디바이스 타입이 iPad일때 if let popoverController = alertController.popoverPresentationController { // ActionSheet가 표현되는 위치를 저장해줍니다. popoverController.barButtonItem = sender as? UIBarButtonItem에 self.present(alertController, animated: true, completion: nil) } } else { self.present(alertController, animated: true, completion: nil) }
마치며
당연히 문제 없이 되는 줄 알았는데 뜻밖에 오류를 확인하고 당황했었습니다. 보통은 iPhone 작업만 하다보니 확인하지 못했던 문제였습니다. 그리고 뿜어내는 오류를 일단 해석하고 이해하는게 중요하다는걸 또 깨달았습니다.감사합니다. 틀린점이 물어보실게 있다면 댓글로 남겨 주시면 적극 반영하겠습니다.
'iOS 프로그래밍 > iOS 오류' 카테고리의 다른 글
Custom FrameWork Bulid error (0) | 2017.04.24 |
---|---|
iOS 오류) ENABLE_BITCODE 오류 (1) | 2016.06.21 |
iOS 오류) URL nil 오류 나는 문제 (0) | 2016.06.21 |