0

UIViewController에 정의 된 popover가 있지만 이제 사용자 정의 UICollectionViewCell에서 제시해야합니다. 클래스가 UICollectionViewCell이고 더 이상 UIViewController가 아니기 때문에 present은 더 이상 작동하지 않습니다. 사용자 정의 UICollectionViewCell에서 팝업을 어떻게 표시합니까? 커스텀 UICollectionViewCell에서 popoverPresentationController를 표현하는 방법 NIB

@IBAction func period(_ sender: Any) { 

     let storyboard = UIStoryboard(name: "ScoreClockPopoverViewController", bundle: nil) 
     let scoreClockPopoverViewController = storyboard.instantiateViewController(withIdentifier: "ScoreClockPopoverViewController") as! ScoreClockPopoverViewController 

     scoreClockPopoverViewController.modalPresentationStyle = .popover 

     let popover = scoreClockPopoverViewController.popoverPresentationController! 
     popover.delegate = self 
     popover.permittedArrowDirections = .any 
     popover.sourceView = periodButton 
     popover.sourceRect = periodButton.bounds 


     present(scoreClockPopoverViewController, animated: true, completion:nil) 
     //Error: Use of unresolved identifier 'present' 

    } 

나는 다음과 같은 오류를 얻을 UIViewContollerUICollectionViewCell을 확장하려고하면

: Extension of type 'HeaderCollectionViewCell' cannot inherit from class 'UIViewController'

+0

아마도 'period()'액션을 View Controller에 "콜백"시키고 View Controller가 Popover를로드하고 표시하도록 할 것입니다. – DonMag

답변

0

CollectionViewCell의 대표로 CollectionViewcontroller을 설정합니다.

CollectionViewCell의 마침표 기능이 호출되면 셀 위임자의 "didClickPeriod"함수를 호출하십시오.

예 : 셀에서

protocol HeaderCollectionViewCellDelegate { 
    func didClickPeriod(sender: Any) 
} 

은 셀 속성

var delegate: HeaderCollectionViewCellDelegate! 

을 주목이 있는지 확인!. Storyboard에서 인스턴스화한다고 가정하면 인스턴스화시 대리인을 전달할 수 없지만 "수동으로"채워야합니다. 그! 기본적으로 항상이 속성을 설정하는 것처럼 작업 할 수 있다고 명시합니다. 속성을 제대로 채우면 항상 래핑되지 않게됩니다. 그렇지 않으면 충돌이 발생합니다. 기간 기능에

단순히 CollectionViewController하기에

@IBAction func period(_ sender: Any) { 
    self.delegate.didClickPeriod(sender) 
} 

확신은, 예를 들어 프로토콜을 구현 할

+0

감사합니다. 그러나, 나는 '치명적인 오류 : 예상치 않게 델리게이트가 선택 값을 언 래핑하는 동안 무조건 발견 됨'상태가됩니다. 나는 delegate = self as를 추가하려고 시도 했는가? HeaderCollectionViewCellDelegate'를 사용하여 func awakeFromNib() {를 덮어 쓰지 만 여전히 nil입니다. –

+0

Delegate = self를 잘못된 위치에 추가하고 CollectionViewcontroller에 추가했습니다. –

+0

그게 무슨 뜻인지 – MarkHim