2013-08-16 22 views
5

Chcę dodać UIScrollView z stronicowania, aby przejść przez różne widoki z mojego istniejącego kontrolera widoku, który jest głównym widoku mojej aplikacji. Mam również pasek narzędzi i kontrolerów paska nawigacyjnego wraz z nim. Czy mogę dodać widok przewijania do tego kontrolera widoku, aby osiągnąć to, czego chcę, a jeśli tak, to czy ktoś może wskazać mi właściwy kierunek postępowania?Dodaj UIScrollView z Paging do istniejącego UIViewController

Oto mój kontroler widoku.

#import "KFBViewController.h" 
#import "ListViewController.h" 
#import "ActionAlertsViewController.h" 
#import "MarketUpdatesViewController.h" 
#import "AgStoriesViewController.h" 
#import "KFBNewsViewController.h" 
#import "MemberBenefits.h" 
#import "SocialNetworks.h" 
#import "WebViewController.h" 
#import "YouTubeView.h" 
#import "KFBFlickrViewController.h" 
#import "RSFM.h" 
#import "UAPush.h" 
#import "TUSafariActivity.h" 

@interface KFBViewController() 
{ 

} 

@end 

@implementation KFBViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) 
    { 
     self.title = NSLocalizedString(@"Home", @"Home"); 
     self.tabBarItem.image = [UIImage imageNamed:@"home"]; 
     self.navigationController.delegate = self; 
    } 
    return self; 
} 

- (void) showMenu 
{ 
    NSURL *urlToShare = [NSURL URLWithString:@"https://itunes.apple.com/us/app/kentucky-farm-bureau/id580530986?mt=8"]; 
    NSArray *activityItems = @[urlToShare]; 
    // TUSafariActivity *activity = [[TUSafariActivity alloc] init]; 

    UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil]; 
    activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeAssignToContact, UIActivityTypePostToWeibo, UIActivityTypeSaveToCameraRoll]; 

    [self presentViewController:activityVC animated:TRUE completion:nil]; 
} 

- (IBAction)gotoSecondView 
{ 
    YouTubeView *youTubeView = [[YouTubeView alloc] initWithNibName:@"YouTubeView" bundle:nil]; 
    youTubeView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentViewController:youTubeView animated:YES completion:nil]; 
} 
- (IBAction)gotoPublicAffairs 
{ 
    ListViewController *publicAffairs = [[ListViewController alloc]initWithStyle:UITableViewStylePlain]; 
    WebViewController *wvc = [[WebViewController alloc]init]; 
    [publicAffairs setWebViewController:wvc]; 
    publicAffairs.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self.navigationController pushViewController:publicAffairs animated:YES]; 
} 

- (IBAction)gotoActionAlerts 
{ 
    ActionAlertsViewController *actionAlerts = [[ActionAlertsViewController alloc]initWithStyle:UITableViewStylePlain]; 
    WebViewController *wvc = [[WebViewController alloc]init]; 
    [actionAlerts setWebViewController:wvc]; 
    actionAlerts.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self.navigationController pushViewController:actionAlerts animated:YES]; 
} 

- (IBAction)gotoMarketUpdates 
{ 
    MarketUpdatesViewController *marketUpdates = [[MarketUpdatesViewController alloc]initWithStyle:UITableViewStylePlain]; 
    WebViewController *wvc = [[WebViewController alloc]init]; 
    [marketUpdates setWebViewController:wvc]; 
    marketUpdates.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self.navigationController pushViewController:marketUpdates animated:YES]; 
} 

- (IBAction)gotoAgStories 
{ 
    AgStoriesViewController *agStories = [[AgStoriesViewController alloc]initWithStyle:UITableViewStylePlain]; 
    WebViewController *wvc = [[WebViewController alloc]init]; 
    [agStories setWebViewController:wvc]; 
    agStories.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self.navigationController pushViewController:agStories animated:YES]; 
} 

- (IBAction)gotoKFBNews 
{ 
    KFBNewsViewController *kfbNews = [[KFBNewsViewController alloc]initWithStyle:UITableViewStylePlain]; 
    WebViewController *wvc = [[WebViewController alloc]init]; 
    [kfbNews setWebViewController:wvc]; 
    kfbNews.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self.navigationController pushViewController:kfbNews animated:YES]; 
} 

- (IBAction)gotoMemberBenefits 
{ 
    MemberBenefits *memberBenefits = [[MemberBenefits alloc] initWithNibName:nil bundle:nil]; 
    memberBenefits.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self.navigationController pushViewController:memberBenefits animated:YES]; 
} 

-(IBAction)gotoPhotos:(id)sender 
{ 
    KFBFlickrViewController *photosView = [[KFBFlickrViewController alloc] initWithNibName:@"KFBFlickrViewController" bundle:nil]; 
    [self.navigationController pushViewController:photosView animated:YES]; 
} 

- (IBAction)gotoSocialNetworks 
{ 
    SocialNetworks *socialNetworks = [[SocialNetworks alloc] initWithNibName:nil bundle:nil]; 
    socialNetworks.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self.navigationController pushViewController:socialNetworks animated:YES]; 
} 

- (IBAction)gotoFarmMarkets 
{ 
    RSFM *rsfm = [[RSFM alloc] initWithNibName:nil bundle:nil]; 
    rsfm.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self.navigationController pushViewController:rsfm animated:YES]; 
} 

- (IBAction)settingsButtonPressed:(id)sender 
{ 
    [UAPush openApnsSettings:self animated:YES]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    self.title = @"Home"; 

    UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"\u2699" style:UIBarButtonItemStyleBordered target:self action:@selector(settingsButtonPressed:)]; 
    [settingsButton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont boldSystemFontOfSize:24], UITextAttributeFont,nil] forState:UIControlStateNormal]; 
    self.navigationItem.leftBarButtonItem = settingsButton; 

    UIBarButtonItem *systemAction = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(showMenu)]; 
    self.navigationItem.rightBarButtonItem = systemAction; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

@end 

Odpowiedz

10

To działa bardzo dobrze dla mnie:

stwierdzenie nieruchomość za swoimi UIScrollView, i ustawić ViewController jako UIScrollViewDelegate

@interface ViewController : UIViewController<UIScrollViewDelegate> 

@property (strong, nonatomic) UIScrollView *theScrollView; 

@end 

** Zauważ, że konfiguruję mój kod UIScrollView, ale można go łatwo wykonać za pomocą XIB.

W viewDidLoad: swojej ViewController

self.theScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 50, self.view.frame.size.width, 300)]; 
    self.theScrollView.delegate = self; 
    self.theScrollView.pagingEnabled = YES; 
    self.theScrollView.showsHorizontalScrollIndicator = NO;  
    self.theScrollView.showsVerticalScrollIndicator = NO; 
    [self.view addSubview:self.theScrollView]; 

    NSArray *viewArray = [NSArray arrayWithObjects://your UIViews]; 

    for(int i=0; i<viewArray.count; i++) 
    { 
     CGRect frame; 
     frame.origin.x = self.theScrollView.frame.size.width * i; 
     frame.origin.y = 0; 
     frame.size = self.theScrollView.frame.size; 

     UIView *subview = [[UIView alloc] initWithFrame:frame]; 
     [subview addSubview:[viewArray objectAtIndex:i]]; 
     [self.theScrollView addSubview:subview]; 
    } 

    self.theScrollView.contentSize = CGSizeMake(self.theScrollView.frame.size.width * viewArray.count, self.theScrollView.frame.size.height); 

Większość scrollViews przywoławcze mają również UIPageControl z nim związane. Aby to zrobić, zmienić to UIScrollViewDelegate metody:

- (void)scrollViewDidScroll:(UIScrollView *)sender { 
    CGFloat pageWidth = self.theScrollView.frame.size.width; 
    int page = floor((self.theScrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    self.thePageControl.currentPage = page; 
} 
+0

To zawiesza się w tym wierszu: [subview addSubview: [viewArray objectAtIndex: i]]; z nierozpoznanym selektorem wysłanym do instancji 0xc18acd0 – raginggoat

+0

Która linia? @ user2029585 – hgwhittle

+0

Zmienilem swój komentarz. Uderzyłem wejść przez przypadek wcześniej. – raginggoat

1

bym może spróbować użyć UIPageViewController, raczej niż zwykły stronicowania Scrollview.

Apple PhotoScroller sample code stanowi bardzo dobry przykład użycia UIPageViewController.

Mam również niektóre code on github, który modyfikuje PhotoScroller do załadowania UIPageViewController wewnątrz podklasy UIViewController. (W przykładowym kodzie Apple'a, tym UIPageViewController jest kontroler widoku głównego.)

nigdy nie użył UIPageViewController z różnych UIViewController podklasy na każdej stronie (przykładowy kod PhotoScroller wykorzystuje PhotoViewController s na wszystkich stronach), ale nie mogę zobacz, dlaczego nie można tego zrobić za pomocą kilku modyfikacji kodu.