Note that there are some explanatory texts on larger screens.

plurals
  1. POPassing a Value Through a Navigation Controller
    primarykey
    data
    text
    <p>I'm looking to pass a user chosen value from one view to the next so it can be submitted to Twitter, Facebook, etc.</p> <p>Would a global variable be best to implement? I don't want the value to be stored or saved anywhere.. just to make it through the end of the navigation controller (submission to Facebook, Twitter, etc.)</p> <p>Any suggestions? Thanks in advance.</p> <p><strong>Header File</strong></p> <pre><code>#import &lt;UIKit/UIKit.h&gt; #import &lt;Foundation/Foundation.h&gt; #import "ShareViewController.h" #include "TwitterRushViewController.h" @interface KindViewController : UIViewController &lt;UIPickerViewDelegate, UIScrollViewDelegate, CLLocationManagerDelegate&gt; { IBOutlet UIScrollView *scrollView; IBOutlet UIPageControl *pageControl; BOOL pageControlIsChangingPage; CLLocationManager *locationManager; NSString *finalCoordinates; NSString *finalChoice; } @property (nonatomic, retain) UIView *scrollView; @property (nonatomic, retain) UIPageControl *pageControl; @property (nonatomic, retain) CLLocationManager *locationManager; @property (retain) NSString *finalCoordinates; @property (nonatomic, copy) NSString *finalChoice; -(IBAction)changePage:(id)sender; -(IBAction)submitChoice:(id)sender; -(void)setupPage; @end </code></pre> <p><strong>Implementation File</strong></p> <pre><code>#import "KindViewController.h" #import "JSON/JSON.h" @implementation KindViewController @synthesize scrollView; @synthesize pageControl; @synthesize locationManager; @synthesize finalCoordinates; @synthesize finalChoice; #pragma mark - #pragma mark UIView boilerplate - (void)viewDidLoad { [self setupPage]; [super viewDidLoad]; // Alert the User on Location Access self.locationManager = [[[CLLocationManager alloc] init] autorelease]; self.locationManager.delegate = self; [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; } -(void)viewWillAppear:(BOOL)animated { [locationManager startUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { CLLocation *location = newLocation; NSLog(@"Our current Latitude is %f", location.coordinate.latitude); NSLog(@"Our current Longitude is %f", location.coordinate.longitude); NSString *Coordinates = [[NSString alloc] initWithFormat: @"Longitude=%f&amp;Latitude=%f", location.coordinate.longitude, location.coordinate.latitude ]; NSLog(@"Test: %@", Coordinates); finalCoordinates = Coordinates; [locationManager stopUpdatingLocation]; } #pragma mark - #pragma mark The Guts - (void)setupPage { scrollView.delegate = self; [scrollView setCanCancelContentTouches:NO]; scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite; scrollView.clipsToBounds = YES; scrollView.scrollEnabled = YES; scrollView.pagingEnabled = YES; NSUInteger nimages = 0; CGFloat cx = 0; for (; ; nimages++) { NSString *imageName = [NSString stringWithFormat:@"choice%d.png", (nimages + 1)]; UIImage *image = [UIImage imageNamed:imageName]; if (image == nil) { break; } UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; CGRect rect = imageView.frame; rect.size.height = image.size.height; rect.size.width = image.size.width; rect.origin.x = ((scrollView.frame.size.width - image.size.width) / 2) + cx; rect.origin.y = ((scrollView.frame.size.height - image.size.height) / 2); imageView.frame = rect; [scrollView addSubview:imageView]; [imageView release]; cx += scrollView.frame.size.width; } self.pageControl.numberOfPages = nimages; [scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)]; } #pragma mark - #pragma mark UIScrollViewDelegate stuff - (void)scrollViewDidScroll:(UIScrollView *)_scrollView { if (pageControlIsChangingPage) { return; } CGFloat pageWidth = _scrollView.frame.size.width; int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1; pageControl.currentPage = page; } - (void)scrollViewDidEndDecelerating:(UIScrollView *)_scrollView { pageControlIsChangingPage = NO; } #pragma mark - #pragma mark PageControl stuff - (IBAction)changePage:(id)sender { CGRect frame = scrollView.frame; frame.origin.x = frame.size.width * pageControl.currentPage; frame.origin.y = 0; [scrollView scrollRectToVisible:frame animated:YES]; pageControlIsChangingPage = YES; } -(IBAction)submitChoice:(id)sender; { // Spinner UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(135,140,50,50)]; [spinner startAnimating]; [self.view addSubview:spinner]; // Find the Date NSDateFormatter *format = [[NSDateFormatter alloc] init]; [format setDateFormat:@"MMM dd, yyyy HH:mm"]; NSDate *now = [[NSDate alloc] init]; NSString *dateString = [format stringFromDate:now]; // Echo Everything NSLog(@"Type is %f.", scrollView.contentOffset.x); NSLog(@"Date is %@", dateString); NSLog(@"Coordinates are %@", finalCoordinates); NSString *completeURL = [[NSString alloc] initWithFormat: @"http://www.example.com/insert.php?Type=%f&amp;Time=%@&amp;%@", scrollView.contentOffset.x, dateString, finalCoordinates]; NSString *escapedUrl = [completeURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"URL is %@.", escapedUrl); // Post to Web Server NSURL *urlToSend = [[NSURL alloc] initWithString:escapedUrl]; NSLog(@"NSURL is %@.", urlToSend); NSURLRequest *urlRequest = [NSURLRequest requestWithURL:urlToSend cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30]; NSData *urlData; NSURLResponse *response; NSError *error; urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&amp;response error:&amp;error]; // Do the Button Action ShareViewController *shareViewController = [[ShareViewController alloc] initWithNibName:@"ShareViewController" bundle:nil]; shareViewController.finalChoice = @"Facebook Property"; [self.navigationController pushViewController:shareViewController animated:YES]; [shareViewController release]; [urlToSend release]; [completeURL release]; [spinner release]; } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"There is an error updating the location"); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } - (void)viewDidUnload { [super viewDidUnload]; [pageControl release]; } - (void)dealloc { [super dealloc]; } @end </code></pre> <p><strong>ShareViewController.h</strong></p> <pre><code>#import &lt;UIKit/UIKit.h&gt; #import "MapViewController.h" #import "SA_OAuthTwitterController.h" #import "FBConnect/FBConnect.h" #import "TwitterRushViewController.h" #import "oAuth2TestViewController.h" @class SA_OAuthTwitterEngine; @interface ShareViewController : UIViewController &lt;UITextFieldDelegate, SA_OAuthTwitterControllerDelegate&gt; { } @property (nonatomic, retain) IBOutlet UIButton *shareFacebookBTN; @property (nonatomic, retain) IBOutlet UIButton *shareTwitterBTN; @property (nonatomic, retain) KindViewController finalChoice; /* Submissions */ - (IBAction)shareNoThanks:(id)sender; - (IBAction)shareFacebook:(id)sender; - (IBAction)shareTwitter:(id)sender; @end </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload