내 경우에는 부모 UIViewController
가 UIPageViewController
포함 UINavigationController
하는 포함 UIViewController
합니다. 마지막 뷰 컨트롤러에 스 와이프 제스처를 추가해야하지만 스 와이프는 마치 페이지 뷰 컨트롤러에 속하는 것처럼 처리됩니다. 프로그래밍 방식과 xib를 통해이 작업을 시도했지만 결과는 없습니다.
내가 이해하는 것처럼 UIPageViewController
제스처를 처리 할 때까지 목표를 달성 할 수 없습니다 . 이 문제를 해결하는 방법?
답변
UIPageViewController
스크롤 을 방지하는 문서화 된 방법 은 dataSource
속성을 할당하지 않는 것 입니다. 데이터 소스를 할당하면이를 방지하려는 ‘제스처 기반’탐색 모드로 이동합니다.
데이터 소스가없는 경우 setViewControllers:direction:animated:completion
방법 을 원할 때 수동으로 뷰 컨트롤러를 제공하면 필요 에 따라 뷰 컨트롤러간에 이동할 수 있습니다.
위의 내용은 Apple의 UIPageViewController 문서 (개요, 두 번째 단락) 에서 추론 할 수 있습니다 .
제스처 기반 탐색을 지원하려면 데이터 소스 객체를 사용하여 뷰 컨트롤러를 제공해야합니다.
답변
for (UIScrollView *view in self.pageViewController.view.subviews) {
if ([view isKindOfClass:[UIScrollView class]]) {
view.scrollEnabled = NO;
}
}
답변
user2159978의 답변 을 Swift 5.1로 번역합니다.
func removeSwipeGesture(){
for view in self.pageViewController!.view.subviews {
if let subView = view as? UIScrollView {
subView.isScrollEnabled = false
}
}
}
답변
@lee (@ user2159978) 솔루션을 확장으로 구현 :
extension UIPageViewController {
var isPagingEnabled: Bool {
get {
var isEnabled: Bool = true
for view in view.subviews {
if let subView = view as? UIScrollView {
isEnabled = subView.isScrollEnabled
}
}
return isEnabled
}
set {
for view in view.subviews {
if let subView = view as? UIScrollView {
subView.isScrollEnabled = newValue
}
}
}
}
}
사용법 : (에서 UIPageViewController
)
self.isPagingEnabled = false
답변
나는 이것을 잠시 동안 싸워 왔고 Jessedc의 대답에 따라 해결책을 게시해야한다고 생각했다. PageViewController의 데이터 소스를 제거합니다.
내 PgeViewController 클래스에이를 추가 (스토리 보드에 내 페이지 뷰 컨트롤러에 연결, 상속 둘 UIPageViewController
과 UIPageViewControllerDataSource
) :
static func enable(enable: Bool){
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let pageViewController = appDelegate.window!.rootViewController as! PgeViewController
if (enable){
pageViewController.dataSource = pageViewController
}else{
pageViewController.dataSource = nil
}
}
그런 다음 각 하위 뷰가 나타날 때 호출 할 수 있습니다 (이 경우 비활성화).
override func viewDidAppear(animated: Bool) {
PgeViewController.enable(false)
}
나는 이것이 누군가를 도울 수 있기를 희망합니다.
편집 : 누군가 이것을 Objective-C로 번역하려면 🙂
답변
편집 :이 답변은 페이지 말림 스타일에만 적용됩니다. Jessedc의 대답 은 훨씬 낫습니다. 스타일에 관계없이 작동하며 문서화 된 동작에 의존합니다 .
UIPageViewController
동작 인식기 배열을 표시하며이를 사용하지 않도록 설정할 수 있습니다.
// myPageViewController is your UIPageViewController instance
for (UIGestureRecognizer *recognizer in myPageViewController.gestureRecognizers) {
recognizer.enabled = NO;
}
답변
당신이 원하는 경우 UIPageViewController
콘텐츠 컨트롤이 자신의 기능을 (문지 삭제 등)에 사용할 수 있도록하면서, 슬쩍 그것의 기능을 유지 단지 끕니다 canCancelContentTouches
에 UIPageViewController
.
이것을 당신 UIPageViewController
의 viewDidLoad
기능 에 넣으십시오 . (빠른)
if let myView = view?.subviews.first as? UIScrollView {
myView.canCancelContentTouches = false
}
이 UIPageViewController
제스처를 처리하는 자동 생성 된 하위보기가 있습니다. 이러한 서브 뷰가 컨텐츠 제스처를 취소하지 못하게 할 수 있습니다.
에서…