2013-08-16 20 views
5

Sto aggiungendo un UIScrollView con paging per passare attraverso diverse visualizzazioni dal mio controller di visualizzazione esistente che è la vista root della mia app. Ho anche i controller di barra delle schede e barra di navigazione con esso. Posso aggiungere una vista di scorrimento a questo controller di visualizzazione per ottenere ciò che voglio e, in tal caso, qualcuno può indicarmi la giusta direzione su come procedere?Aggiungi UIScrollView con cercapersone a UIViewController esistente

Ecco il mio controller di visualizzazione.

#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 

risposta

10

Questo funziona molto bene per me:

dichiarare una proprietà per la vostra UIScrollView, e impostare il ViewController come UIScrollViewDelegate

@interface ViewController : UIViewController<UIScrollViewDelegate> 

@property (strong, nonatomic) UIScrollView *theScrollView; 

@end 

** Nota che sto configurando il mio UIScrollView con codice, ma può essere fatto facilmente con un XIB.

In viewDidLoad: del vostro 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); 

La maggior parte scrollViews paging hanno anche un UIPageControl ad esso associati. Per fare questo, ignorare questo metodo UIScrollViewDelegate:

- (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

Si blocca su questa riga: [subview addSubview: [viewArray objectAtIndex: i]]; con selettore non riconosciuto inviato all'istanza 0xc18acd0 – raginggoat

+0

Quale linea? @ user2029585 – hgwhittle

+0

Ho modificato il mio commento. Ho colpito entri per caso prima. – raginggoat

1

avrei forse provare a utilizzare UIPageViewController, piuttosto che un normale ScrollView paging.

Apple PhotoScroller sample code fornisce un ottimo esempio di come utilizzare UIPageViewController.

Ho anche qualche code on github che modifica PhotoScroller per caricare UIPageViewController all'interno di una sottoclasse UIViewController. (Nel codice di esempio di Apple, il UIPageViewController è il controller della vista di root.)

ho mai usato un UIPageViewController con diversi UIViewController sottoclassi in ogni pagina (il codice di esempio PhotoScroller utilizza PhotoViewController s in tutte le pagine), ma non ci riesco vedere perché non potrebbe essere fatto con alcune modifiche al codice.

Problemi correlati