উত্তর:
হ্যাঁ পদ্ধতি দ্বারা এটি সম্ভব:
- (void)setViewControllers:(NSArray *)viewControllers
direction:(UIPageViewControllerNavigationDirection)direction
animated:(BOOL)animated
completion:(void (^)(BOOL finished))completion;`
পৃষ্ঠায় প্রথম দর্শন নিয়ামক সেটআপ করার জন্য এটি একই পদ্ধতি ব্যবহৃত হয়। অনুরূপ, আপনি অন্যান্য পৃষ্ঠাগুলিতে যেতে এটি ব্যবহার করতে পারেন।
ভাবছেন কেন viewControllers
একটি অ্যারে, এবং একক দর্শন নিয়ামক নয়?
এটি কারণ একটি পৃষ্ঠার ভিউ কন্ট্রোলারের একটি "মেরুদণ্ড" থাকতে পারে (আইবুকগুলির মতো), যা একবারে 2 পৃষ্ঠার সামগ্রী প্রদর্শন করে। আপনি যদি একসাথে 1 পৃষ্ঠার সামগ্রী প্রদর্শন করেন তবে কেবল 1-উপাদান অ্যারেতে পাস করুন।
সুইফটে একটি উদাহরণ:
pageContainer.setViewControllers([displayThisViewController], direction: .Forward, animated: true, completion: nil)
যেহেতু আমারও এটির প্রয়োজন ছিল, আমি এটি কীভাবে করব সে সম্পর্কে আরও বিশদে যাব।
দ্রষ্টব্য: আমি ধরে নিয়েছি যে আপনি আপনার UIPageViewController
কাঠামো তৈরির জন্য স্ট্যান্ডার্ড টেম্পলেট ফর্মটি ব্যবহার করেছেন - যা আপনি যখন প্রার্থনা করেন তখন উভয়ই তৈরি modelViewController
এবং dataViewController
তৈরি হয়েছিল। আমি কী লিখেছি তা যদি আপনি বুঝতে না পারেন - ফিরে যান এবং একটি নতুন প্রকল্প তৈরি করুন UIPageViewController
যা এটির ভিত্তি হিসাবে ব্যবহার করে । আপনি তখন বুঝতে পারবেন।
সুতরাং, একটি নির্দিষ্ট পৃষ্ঠায় ফ্লিপ করা প্রয়োজন উপরে তালিকাভুক্ত পদ্ধতি বিভিন্ন টুকরা সেট আপ জড়িত। এই অনুশীলনের জন্য, আমি ধরে নিচ্ছি যে এটি একটি ল্যান্ডস্কেপ দৃশ্য যা দুটি দর্শন দেখিয়েছে। এছাড়াও, আমি এটি আইবিএএকশন হিসাবে প্রয়োগ করেছি যাতে এটি একটি বোতাম প্রেস থেকে করা যায় বা কী হয় না - এটি নির্বাচককে কল করা এবং প্রয়োজনীয় আইটেমগুলিতে পাস করা ঠিক তত সহজ।
সুতরাং, এই উদাহরণের জন্য আপনার দুটি ভিউ কন্ট্রোলার দরকার যা প্রদর্শিত হবে - এবং optionচ্ছিকভাবে আপনি বইতে বা পিছনের দিকে এগিয়ে যাচ্ছেন কিনা।
মনে রাখবেন যে আমি যেখানে কেবল পৃষ্ঠা 4 এবং 5 এ যাব এবং কেবল ফরোয়ার্ড স্লিপ ব্যবহার করব তা কেবল হার্ড-কোডড। এখান থেকে আপনি দেখতে পাচ্ছেন যে আপনাকে যা করতে হবে তা হল ভেরিয়েবলগুলি পাস করা যা আপনাকে এই আইটেমগুলি পেতে সহায়তা করবে ...
-(IBAction) flipToPage:(id)sender {
// Grab the viewControllers at position 4 & 5 - note, your model is responsible for providing these.
// Technically, you could have them pre-made and passed in as an array containing the two items...
DataViewController *firstViewController = [self.modelController viewControllerAtIndex:4 storyboard:self.storyboard];
DataViewController *secondViewController = [self.modelController viewControllerAtIndex:5 storyboard:self.storyboard];
// Set up the array that holds these guys...
NSArray *viewControllers = nil;
viewControllers = [NSArray arrayWithObjects:firstViewController, secondViewController, nil];
// Now, tell the pageViewContoller to accept these guys and do the forward turn of the page.
// Again, forward is subjective - you could go backward. Animation is optional but it's
// a nice effect for your audience.
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
// Voila' - c'est fin!
}
একক পেজযুক্ত দর্শনের জন্য এখানে আরও একটি কোড উদাহরণ রয়েছে। ভিউকন্ট্রোলারএটিআইডেক্সের বাস্তবায়ন এখানে বাদ দেওয়া হয়েছে, প্রদত্ত সূচকের জন্য এটি সঠিক দর্শন নিয়ন্ত্রককে ফিরিয়ে আনতে হবে।
- (void)changePage:(UIPageViewControllerNavigationDirection)direction {
NSUInteger pageIndex = ((FooViewController *) [_pageViewController.viewControllers objectAtIndex:0]).pageIndex;
if (direction == UIPageViewControllerNavigationDirectionForward) {
pageIndex++;
}
else {
pageIndex--;
}
FooViewController *viewController = [self viewControllerAtIndex:pageIndex];
if (viewController == nil) {
return;
}
[_pageViewController setViewControllers:@[viewController]
direction:direction
animated:YES
completion:nil];
}
কল করে পৃষ্ঠাগুলি পরিবর্তন করা যেতে পারে
[self changePage:UIPageViewControllerNavigationDirectionReverse];
[self changePage:UIPageViewControllerNavigationDirectionForward];
আমি এখানে পুরোপুরি কিছু অনুপস্থিত হতে পারি, তবে এই সমাধানটি অন্য অনেকের প্রস্তাবিত চেয়ে অনেক সহজ বলে মনে হচ্ছে।
extension UIPageViewController {
func goToNextPage(animated: Bool = true, completion: ((Bool) -> Void)? = nil) {
if let currentViewController = viewControllers?[0] {
if let nextPage = dataSource?.pageViewController(self, viewControllerAfter: currentViewController) {
setViewControllers([nextPage], direction: .forward, animated: animated, completion: completion)
}
}
}
}
এই কোডটি আমার জন্য সুন্দরভাবে কাজ করেছে, ধন্যবাদ।
এটি আমি এটি দিয়ে কি করেছি। সামনে বা পিছনের দিকে পা বাড়ানোর জন্য কয়েকটি পদ্ধতি এবং একটি নির্দিষ্ট পৃষ্ঠায় সরাসরি যাওয়ার জন্য একটি। এটি প্রতিক্রিয়া দর্শনে 6 পৃষ্ঠার নথির জন্য। আপনি যদি পৃষ্ঠার ভিউকন্ট্রোলার টেম্পলেটটির রুটকন্ট্রোলার প্রয়োগে এটি পেস্ট করেন তবে এটি ঠিক আছে।
-(IBAction)pageGoto:(id)sender {
//get page to go to
NSUInteger pageToGoTo = 4;
//get current index of current page
DataViewController *theCurrentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
NSUInteger retreivedIndex = [self.modelController indexOfViewController:theCurrentViewController];
//get the page(s) to go to
DataViewController *targetPageViewController = [self.modelController viewControllerAtIndex:(pageToGoTo - 1) storyboard:self.storyboard];
DataViewController *secondPageViewController = [self.modelController viewControllerAtIndex:(pageToGoTo) storyboard:self.storyboard];
//put it(or them if in landscape view) in an array
NSArray *theViewControllers = nil;
theViewControllers = [NSArray arrayWithObjects:targetPageViewController, secondPageViewController, nil];
//check which direction to animate page turn then turn page accordingly
if (retreivedIndex < (pageToGoTo - 1) && retreivedIndex != (pageToGoTo - 1)){
[self.pageViewController setViewControllers:theViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
}
if (retreivedIndex > (pageToGoTo - 1) && retreivedIndex != (pageToGoTo - 1)){
[self.pageViewController setViewControllers:theViewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:NULL];
}
}
-(IBAction)pageFoward:(id)sender {
//get current index of current page
DataViewController *theCurrentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
NSUInteger retreivedIndex = [self.modelController indexOfViewController:theCurrentViewController];
//check that current page isn't first page
if (retreivedIndex < 5){
//get the page to go to
DataViewController *targetPageViewController = [self.modelController viewControllerAtIndex:(retreivedIndex + 1) storyboard:self.storyboard];
//put it(or them if in landscape view) in an array
NSArray *theViewControllers = nil;
theViewControllers = [NSArray arrayWithObjects:targetPageViewController, nil];
//add page view
[self.pageViewController setViewControllers:theViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
}
}
-(IBAction)pageBack:(id)sender {
//get current index of current page
DataViewController *theCurrentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
NSUInteger retreivedIndex = [self.modelController indexOfViewController:theCurrentViewController];
//check that current page isn't first page
if (retreivedIndex > 0){
//get the page to go to
DataViewController *targetPageViewController = [self.modelController viewControllerAtIndex:(retreivedIndex - 1) storyboard:self.storyboard];
//put it(or them if in landscape view) in an array
NSArray *theViewControllers = nil;
theViewControllers = [NSArray arrayWithObjects:targetPageViewController, nil];
//add page view
[self.pageViewController setViewControllers:theViewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:NULL];
}
}
সুইফট 4:
আমি যখন একটি পেজকন্ট্রোলার ভিউ কন্ট্রোলারে পরবর্তী ট্যাপ করেছিলাম এবং পৃষ্ঠাগুলি নিয়ন্ত্রণ সূচকও আপডেট করি তখন আমার পরবর্তী কন্ট্রোলারে যাওয়ার দরকার ছিল, সুতরাং এটি আমার জন্য সেরা এবং সবচেয়ে সহজ সমাধান ছিল :
let pageController = self.parent as! PageViewController
pageController.setViewControllers([parentVC.orderedViewControllers[1]], direction: .forward, animated: true, completion: nil)
pageController.pageControl.currentPage = 1
ডাটাসোর্স থেকে পদ্ধতিগুলি ব্যবহার সম্পর্কে কী?
UIViewController *controller = [pageViewController.dataSource pageViewController:self.pageViewController viewControllerAfterViewController:pageViewController.viewControllers.firstObject];
[pageViewController setViewControllers:@[controller] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
অনাদিকভাবে পিছিয়ে পড়া জন্য।
ইন সুইফট :
import UIKit
extension HomeViewController {
// MARK: - Carousel management.
func startTimerForMovingCarousel(let numberOfSecondsBetweenFiringsOfTheTimer: NSTimeInterval) {
if (self.timerForMovingCarousel == nil) {
self.timerForMovingCarousel = NSTimer.scheduledTimerWithTimeInterval(numberOfSecondsBetweenFiringsOfTheTimer,
target: self,
selector: "moveCarousel",
userInfo: nil,
repeats: true)
}
}
func moveCarousel() {
println("I move the carousel.")
let currentContentViewControllerDisplayed = self.pageViewController!.viewControllers[0] as! ContentViewController
var index: Int = currentContentViewControllerDisplayed.index
if index == self.arrayViewControllers.count - 1 {
index = 0
} else {
++index
}
let contentViewControllerToDisplay = self.arrayViewControllers[index] as! ContentViewController
self.pageViewController.setViewControllers([contentViewControllerToDisplay],
direction: UIPageViewControllerNavigationDirection.Forward,
animated: true,
completion: nil)
self.pageControl.currentPage = contentViewControllerToDisplay.index
}
func invalidateTimerForMovingCarousel() {
if (self.timerForMovingCarousel != nil) {
self.timerForMovingCarousel.invalidate()
self.timerForMovingCarousel = nil
}
}
}
তবে এই 'সেলফ.পেজভিউ কনট্রোলার সেটভিউ কনট্রোলারস' পদ্ধতি কলটি যে পৃষ্ঠাটি সরে গেছে তার জন্য ভিউকন্ট্রোলারে 'ভিউডিডডিস্পায়ার' কল করে না, যেখানে ম্যানুয়ালি একটি পৃষ্ঠা ঘুরিয়ে সরিয়ে ফেলা পৃষ্ঠায় কলটি ভিডিডিসিপায়ার কল করে। আমি বিশ্বাস করি এটিই আমার ক্রাশের কারণ
"প্রদত্ত ভিউ কন্ট্রোলারের সংখ্যা (0) অনুরোধকৃত উত্তরণের জন্য প্রয়োজনীয় সংখ্যার (1) এর সাথে মেলে না"
পেজভিউ কনট্রোলারের বামে নেভিগেট করার জন্য আমারও একটি বোতামের দরকার ছিল, এটি যেটি সোয়াইপ মোশন থেকে আপনি যা প্রত্যাশা করবেন ঠিক তা করা উচিত।
যেহেতু প্রাকৃতিক সোয়াইপ নেভিগেশন নিয়ে কাজ করার জন্য আমার " পৃষ্ঠাভিউ কনট্রোলার: ভিউকন্ট্রোলারবিফরভিউকন্ট্রোলার " এর ভিতরে ইতিমধ্যে কয়েকটি নিয়ম ছিল , আমি বোতামটি সমস্ত কোডটি পুনরায় ব্যবহার করতে চেয়েছিলাম এবং কেবল নির্দিষ্ট সূচী ব্যবহার করার সামর্থ ছিল না পূর্বের মতো পৃষ্ঠাগুলিতে পৌঁছানোর উত্তরগুলি দিয়েছিল। সুতরাং, আমাকে একটি বিকল্প সমাধান নিতে হয়েছিল।
দয়া করে নোট করুন যে নিম্নলিখিত কোডটি আমার পৃষ্ঠা কাস্টম ভিউ কনট্রোলারের অভ্যন্তরের একটি পৃষ্ঠা ভিউ কন্ট্রোলারের জন্য এবং এর মেরুদণ্ডটি মাঝখানে সেট করা আছে।
আমার নেভিগেট বাম বোতামের জন্য আমি লিখেছি কোডটি এখানে:
- (IBAction)btnNavigateLeft_Click:(id)sender {
// Calling the PageViewController to obtain the current left page
UIViewController *currentLeftPage = [_pageController.viewControllers objectAtIndex:0];
// Creating future pages to be displayed
NSArray *newDisplayedPages = nil;
UIViewController *newRightPage = nil;
UIViewController *newLeftPage = nil;
// Calling the delegate to obtain previous pages
// My "pageViewController:viewControllerBeforeViewController" method returns nil if there is no such page (first page of the book).
newRightPage = [self pageViewController:_pageController viewControllerBeforeViewController:currentLeftPage];
if (newRightPage) {
newLeftPage = [self pageViewController:_pageController viewControllerBeforeViewController:newRightPage];
}
if (newLeftPage) {
newDisplayedPages = [[NSArray alloc] initWithObjects:newLeftPage, newRightPage, nil];
}
// If there are two new pages to display, show them with animation.
if (newDisplayedPages) {
[_pageController setViewControllers:newDisplayedPages direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil];
}
}
আপনি এখান থেকে একটি সঠিক নেভিগেশন বোতাম তৈরি করতে খুব অনুরূপ কিছু করতে পারেন।
যদি যদি পৃষ্ঠাটি নিয়ন্ত্রণ বর্তমান পৃষ্ঠার ইঙ্গিত হে হয় && আপনি পৃষ্ঠাগুলি স্ক্রোল মারফত & এছাড়াও পৃষ্ঠা ViewController কাস্টম বাটন ক্লিক করে নেভিগেট করতে চান, নীচের সহায়ক হতে পারে।
//Set Delegate & Data Source for PageView controller [Say in View Did Load]
self.pageViewController.dataSource = self;
self.pageViewController.delegate = self;
// Delegates called viewControllerBeforeViewController when User Scroll to previous page
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{
[_nextBtn setTitle:@"Next" forState:UIControlStateNormal];
NSUInteger index = ((PageContentViewController*) viewController).pageIndex;
if (index == NSNotFound){
return nil;
}else if (index > 0){
index--;
}else{
return nil;
}
return [self viewControllerAtIndex:index];
}
// ব্যবহারকারী যখন পরবর্তী পৃষ্ঠায় স্ক্রোল করেন তখন ডেলিগেটকে ভিউকন্ট্রোলারএফটারভিউ কনট্রোলার বলা হয়
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{
NSUInteger index = ((PageContentViewController*) viewController).pageIndex;
if (index == NSNotFound){
return nil;
}else if (index < 3){
index++;
}else{
return nil;
}
return [self viewControllerAtIndex:index];}
//Delegate called while transition of pages. The need to apply logic in this delegate is to maintain the index of current page.
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers{
buttonIndex = (int)((PageContentViewController*) pendingViewControllers.firstObject).pageIndex;
}
-(void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{
if (buttonIndex == 0){
_backButton.hidden = true;
}else if (buttonIndex == [self.pageImages count] - 1){
_backButton.hidden = false;
[_nextBtn setTitle:@"Begin" forState:UIControlStateNormal];
}else{
_backButton.hidden = false;
}
}
// কাস্টম বোতামের (পূর্ববর্তী এবং পরবর্তী) লজিক
-(void)backBtnClicked:(id)sender{
if (buttonIndex > 0){
buttonIndex -= 1;
}
if (buttonIndex < 1) {
_backButton.hidden = YES;
}
if (buttonIndex >=0) {
[_nextBtn setTitle:@"Next" forState:UIControlStateNormal];
PageContentViewController *startingViewController = [self viewControllerAtIndex:buttonIndex];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
}
}
-(void)nextBtnClicked:(id)sender{
if (buttonIndex < 3){
buttonIndex += 1;
}
if(buttonIndex == _pageImages.count){
//Navigate Outside Pageview controller
}else{
if (buttonIndex ==3) {
[_nextBtn setTitle:@"Begin" forState:UIControlStateNormal];
}
_backButton.hidden = NO;
PageContentViewController *startingViewController = [self viewControllerAtIndex:buttonIndex];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
}
}
//BUTTON INDEX & MAX COUNT
-(NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController{
return [self.pageImages count];}
-(NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController{
return buttonIndex;}
- (void)moveToPage {
NSUInteger pageIndex = ((ContentViewController *) [self.pageViewController.viewControllers objectAtIndex:0]).pageIndex;
pageIndex++;
ContentViewController *viewController = [self viewControllerAtIndex:pageIndex];
if (viewController == nil) {
return;
}
[self.pageViewController setViewControllers:@[viewController] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
}
// এখন এই পদ্ধতিতে কল করুন
[স্ব-মুভোটোপেজ];
আমি আশা করি এটা কাজ করে :)
একক পৃষ্ঠার জন্য, আমি কেবল @ জ্যাক হামফ্রিজের উত্তর সম্পাদনা করেছি
-(void)viewDidLoad
{
counter = 0;
}
-(IBAction)buttonClick:(id)sender
{
counter++;
DataViewController *secondVC = [self.modelController viewControllerAtIndex:counter storyboard:self.storyboard];
NSArray *viewControllers = nil;
viewControllers = [NSArray arrayWithObjects:secondVC, nil];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
}
@ সাম্বাইজ হিসাবে উল্লেখ করা হয়েছে যে, প্যাগটিংয়ের উপায়টি ব্যবহার করে
setViewControllers:array
আমি এটি করার উপায়টি এখানে: আমার আমার ডেটা সোর্স এবং প্রতিনিধি আলাদা। আপনি এই পদ্ধতিটি কল করতে পারেন এবং কেবল "পরবর্তী" দর্শন পরিবর্তন করতে পারেন। আগে আপনাকে পেজিং বিধি প্রয়োগ করতে হবে। অর্থাৎ আপনাকে দিকনির্দেশ এবং পরবর্তী নিয়ামকটি পরীক্ষা করতে হবে। যদি আপনি সেই পদ্ধতিটি আপনার কাস্টম ডেটাসোর্সের সাথে ব্যবহার করেন তবে আপনি যে কন্ট্রোলারগুলির প্রদর্শন করছেন তা পরিবর্তন হবে না (যেহেতু আপনি কোনও এনএসবজেক্ট সাবক্লাসে একটি কাস্টম অ্যারে ব্যবহার করবেন)।
আপনার নিজস্ব ডেটাসোর্স ব্যবহার করে পদ্ধতিটি একটি নতুন দর্শন সেট করে (নির্দিষ্ট দিকনির্দেশ সহ)। যেহেতু আপনি এখনও পৃষ্ঠাগুলি নিয়ন্ত্রণ করবেন যা সাধারণত সোয়াইপ করার সময় প্রদর্শিত হবে।
আমি গতকাল থেকে এটি নিয়ে কাজ করছি এবং অবশেষে আমি এটি কাজ করেছি। আমি পুরোপুরি স্ট্যান্ডার্ড টেম্পলেটটি ব্যবহার করতে পারি নি, কারণ চাইল্ডভিউ হিসাবে আমার কাছে তিনটি ভিন্ন ভিউকন্ট্রোলার রয়েছে:
1 - rootViewController;
2 - model;
3 - viewControllers
3.1 - VC1;
3.2 - VC2;
3.3 - VC3.
Note: all of VCs has Storyboard ID.
আমার কেবলমাত্র প্রথম ভিসিতে ট্রিগার বোতামের দরকার ছিল, তাই আমি পৃষ্ঠা ভিউকন্ট্রোলার এবং মডেলের জন্য একটি সম্পত্তি যুক্ত করেছি:
#import <UIKit/UIKit.h>
#import "Model.h"
@interface VC1 : UIViewController
@property (nonatomic, strong) UIPageViewController *thePageViewController;
@property (nonatomic, strong) SeuTimePagesModel *theModel;
@end
স্টোরিবোর্ড এবং পৃষ্ঠাভিউ কনট্রোলারকে প্যারামিটার হিসাবে পাস করার জন্য আমি মডেলের ডিআইডি পদ্ধতিটি পুনরায় লিখেছিলাম, যাতে আমি সেগুলিকে আমার ভিসি 1 এ সেট করতে পারি:
- (id)initWithStoryboard:(UIStoryboard *)storyboard
andPageViewController:(UIPageViewController *)controller
{
if (self = [super init])
{
VC1 *vc1 = [storyboard instantiateViewControllerWithIdentifier:@"VC1"];
vc1.pageViewController = controller;
vc1.model = self;
VC2 *vc2 = [storyboard instantiateViewControllerWithIdentifier:@"VC2"];
VC3 *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"VC3"];
self.pageData = [[NSArray alloc] initWithObjects:vc1, vc2, vc3, nil];
}
return self;
}
অবশেষে, পৃষ্ঠা ভিউকন্ট্রোলার পদ্ধতি সেটভিউকন্ট্রোলারগুলি: নির্দেশ: অ্যানিমেটেড: সমাপ্তি ::
- (IBAction)go:(id)sender
{
VC2 *vc2 = [_model.pages objectAtIndex:1];
NSArray *viewControllers = @[vc2];
[_pageViewController setViewControllers:viewControllers
direction:UIPageViewControllerNavigationDirectionForward
animated:YES
completion:nil];
}
দ্রষ্টব্য, আমাকে ভিসি সূচীগুলি সন্ধান করার দরকার নেই, আমার বোতামটি আমাকে আমার দ্বিতীয় উপাচার্যে নিয়ে যায়, তবে সমস্ত সূচী পাওয়া খুব শক্ত নয় এবং আপনার চাইল্ডভিউগুলি ট্র্যাক করে রাখুন:
- (IBAction)selecionaSeuTime:(id)sender
{
NSUInteger index = [_model.pages indexOfObject:self];
index++;
VC2 *vc2 = [_model.pages objectAtIndex:1];
NSArray *viewControllers = @[vc2];
[_pageViewController setViewControllers:viewControllers
direction:UIPageViewControllerNavigationDirectionForward
animated:YES
completion:nil];
}
আমি এটি আপনাকে সাহায্য করে আশা করি!
ইউআইপেজভিউ কনট্রোলারডেটা সোর্স পদ্ধতিগুলি ব্যবহার করে এখানে একটি সমাধান দেওয়া হয়েছে :
কোডটি ইউআইপিএজভিউ কনট্রোলারটিতে বর্তমান প্রদর্শিত ভিউ কন্ট্রোলারের উপর নজর রাখে ।
...
@property (nonatomic, strong) UIViewController *currentViewController;
@property (nonatomic, strong) UIViewController *nextViewController;
...
প্রথমে কারেন্টভিউ কন্ট্রোলারটিকে ইউআইপেজভিউ কনট্রোলারের জন্য প্রাথমিক ভিউ কন্ট্রোলার সেটটিতে সূচনা করুন ।
- (void) viewDidLoad {
[super viewDidLoad];
...
self.currentViewController = self.viewControllers[0];
...
[self.pageViewController setViewControllers: @[self.currentViewController] direction: dir animated: YES completion: nil];
}
তারপর ট্র্যাক রাখতে currentViewController মধ্যে UIPageViewControllerDelegate পদ্ধতি: pageViewController: willTransitionToViewControllers: এবং pageViewController: didFinishAnimating: previousViewControllers: transitionCompleted: ।
- (nullable UIViewController *) pageViewController: (UIPageViewController *) pageViewController viewControllerBeforeViewController: (UIViewController *) viewController {
NSInteger idx = [self.viewControllers indexOfObject: viewController];
if (idx > 0) {
return self.viewControllers[idx - 1];
} else {
return nil;
}
}
- (nullable UIViewController *) pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController: (UIViewController *) viewController {
NSInteger idx = [self.viewControllers indexOfObject: viewController];
if (idx == NSNotFound) {
return nil;
} else {
if (idx + 1 < self.viewControllers.count) {
return self.viewControllers[idx + 1];
} else {
return nil;
}
}
}
- (void) pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> *)pendingViewControllers {
self.nextViewController = [pendingViewControllers firstObject];
}
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers transitionCompleted:(BOOL)completed {
if (completed) {
self.currentViewController = self.nextViewController;
}
}
অবশেষে, আপনার পছন্দের পদ্ধতিতে (এটা এর নীচে দেওয়া উদাহরণে -) (IBAction onNext: (ID) প্রেরক ), আপনি প্রোগ্রামের মাধ্যমে পরবর্তী বা পূর্ববর্তী নিয়ামক ব্যবহার করার সুইচ করতে পারেন UIPageViewControllerDataSouce পদ্ধতি : viewControllerBeforeViewController: pageViewController , pageViewController: viewControllerAfterViewController: পেতে পরবর্তী বা পূর্ববর্তী ভিউ কন্ট্রোলার এবং [সেলফেজ.উইজকন্ট্রোলার সেটভিউ কনক্রোলার্স: @ [ভিসি] দিকনির্দেশ: ইউআইপেজভিউ কনট্রোলার নেভিগেশন নির্দেশিকা ফরওয়ার্ড অ্যানিমেটেড: হ্যাঁ সমাপ্তি: শূন্য] কল করে এটিতে নেভিগেট করুন ;
- (void) onNext {
UIViewController *vc = [self pageViewController: self.tutorialViewController viewControllerAfterViewController: self.currentViewController];
if (vc != nil) {
self.currentViewController = vc;
[self.tutorialViewController setViewControllers: @[vc] direction: UIPageViewControllerNavigationDirectionForward animated: YES completion: nil];
}
}
যেমন ভিউকন্ট্রোলাররা পেজভিউ কনট্রোলারটিতে এম্বেড থাকে আপনার যা করতে হবে তা হ'ল:
জামারিনে উদাহরণ, তবে কার্যত সুইফট ইত্যাদির মতোই অনুরূপ: নিম্নলিখিত কোডটি বোতামে ক্লিক করা হবে ভিউকন্ট্রোলারগুলির মধ্যে একটিতে পৃষ্ঠা হিসাবে দেখানো হচ্ছে:
var parent = ParentViewController as WelcomePageViewController;
var next = parent.DataSource.GetNextViewController(parent, this);
parent.SetViewControllers(new UIViewController[] { next }, UIPageViewControllerNavigationDirection.Forward, true, null);