MKPinannotation detail disclosure button - present new view
Asked Answered
I

1

6

FirstViewController.h

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface TransparentToolbar : UIToolbar{

}
@end
@interface AddressAnnotation : NSObject <MKAnnotation>  {

CLLocationCoordinate2D coordinate;

NSString *title;
  NSString *subTitle;
 NSString *directions;
  NSString *website; 

}
@property (nonatomic,retain) NSString *title;
@property (nonatomic,retain) NSString *subtitle;
@property (nonatomic,retain) NSString *directions;
@property (nonatomic,retain) NSString *website; 


@end


@interface FirstViewController : UIViewController {
IBOutlet MKMapView  *mapView;
//stores go here!
//declare store names as Company *cityState
AddressAnnotation *chiliAuburnAlabama;
AddressAnnotation *tuttifruttiHomewoodAlabama;
NSString *website;
}
@property (nonatomic,retain) NSString *website;
-(IBAction) updateLocation;
-(IBAction) setMap:(id)sender;
-(IBAction) showPin;
@end


FirstViewController.m

#import "FirstViewController.h"
#import "MoreInfo.h"
@implementation AddressAnnotation
@synthesize title;
@synthesize subtitle;
@synthesize coordinate;
@synthesize directions;
@synthesize website;
- (NSString *)subtitle{
return subtitle;

}
-(NSString *) website{
return website;
}  

-(NSString *) directions{
return directions;
}

- (NSString *)title{
return title;
}

-(id)initWithCoordinate:(CLLocationCoordinate2D) c{
coordinate=c;
return self;
}

@end





@implementation TransparentToolbar

// Override draw rect to avoid
// background coloring
- (void)drawRect:(CGRect)rect {
// do nothing in here
}

// Set properties to make background
// translucent.
- (void) applyTranslucentBackground
{
self.backgroundColor = [UIColor clearColor];
self.opaque = NO;
self.translucent = YES;
}

// Override init.
 - (id) init
{
self = [super init];
[self applyTranslucentBackground];
return self;
 }

// Override initWithFrame.
- (id) initWithFrame:(CGRect) frame
 {
self = [super initWithFrame:frame];
[self applyTranslucentBackground];
return self;
}

@end

 @implementation FirstViewController
 @synthesize website;
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)mapViewWillStartLocatingUser:(MKMapView *)mapView{


}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
[self showPin];
}
- (void)viewDidLoad
{  
mapView.showsUserLocation = YES;
//[self showPin];
[super viewDidLoad];




}

-(IBAction) updateLocation{
mapView.showsUserLocation = YES;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
 {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc. that aren't in use.
}


- (void)viewDidUnload
{
[super viewDidUnload];

// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


-(IBAction)setMap:(id)sender{
switch(((UISegmentedControl *)sender).selectedSegmentIndex){
case 0:
{
    mapView.mapType = MKMapTypeStandard;
     break;
}
case 1:
{
    mapView.mapType = MKMapTypeSatellite;
    break;
}
case 2:
{
mapView.mapType = MKMapTypeHybrid;
break;
}

}}


- (MKAnnotationView *)mapView:(MKMapView *)mv viewForAnnotation:(id <MKAnnotation>)annotation {
MKAnnotationView *pinView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"];

if (!pinView) {
    pinView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"] autorelease];
   pinView.image = [UIImage imageNamed:@"SPOON4.png"];
    pinView.frame = CGRectMake(-30, 0, 37.5, 67.5); 
    //pinView.animatesDrop = YES;
    pinView.canShowCallout = YES;


    UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    pinView.rightCalloutAccessoryView = rightButton;

} else {
    pinView.annotation = annotation;
}
if (annotation == mapView.userLocation){
    return nil; //default to blue dot
}
return pinView;
}
-(IBAction) showPin{

MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta=0.2;
span.longitudeDelta=0.2;
//MOST CODE WILL BE INSERTED HERE!
//INSTRUCTIONS!
//CCLocationCoordinate2D companyCity = mapView.userLocation.coordinate;
//companyCity.latitude = latitude here;
//companyCity.longitutde = longitude here;
//CLLocation *companyCityLocation = [[CLLocation alloc] initWithLatitude:companyCity.latitude longitude:companyCity.longitude];
//if(companyCityState != nil) {
//[mapView removeAnnotation:companyCityState];
//[companyCityState release];
//companyCityState = nil;
//}
//companyCityState = [[AddressAnnotation alloc] initWithCoordinate:companyCity];
//companyCityState.title = @"name of shop here";
//double distanceMetersCompanyCityState = [mapView.userLocation.location distanceFromLocation:companyCityLocation];
//double distanceMilesCompanyCityState = distanceMetersCompanyCityState/1609.334;
//companyCityState.subtitle= [NSString stringWithFormat:@"%.2f miles away", distanceMilesCompanyCityState];
//[mapView addAnnotation:companyCityState];
//[companyCityState release];

//always declare location as companyCity 
//if more than one in one city then add a number i.e. companyCity2

//chili in mobile alabama
CLLocationCoordinate2D chiliAuburn = mapView.userLocation.coordinate;
chiliAuburn.latitude = 32.606434 ;
chiliAuburn.longitude = (-85.484025);
CLLocation *chiliAuburnLocation = [[CLLocation alloc] initWithLatitude:chiliAuburn.latitude longitude:chiliAuburn.longitude];




if(chiliAuburnAlabama != nil) {
    [mapView removeAnnotation:chiliAuburnAlabama];
    [chiliAuburnAlabama release];
    chiliAuburnAlabama = nil;
}

chiliAuburnAlabama = [[AddressAnnotation alloc] initWithCoordinate:chiliAuburn];
chiliAuburnAlabama.title = @"Chili Yogurt Café";
chiliAuburnAlabama.website = @"https://mcmap.net/q/1587418/-mkpinannotation-detail-disclosure-button-present-new-view";
double distanceMetersChiliAuburnAlabama = [mapView.userLocation.location distanceFromLocation:chiliAuburnLocation];
double distanceMilesChiliAuburnAlabama = distanceMetersChiliAuburnAlabama/1609.334;
chiliAuburnAlabama.subtitle= [NSString stringWithFormat:@"%.1f miles away", distanceMilesChiliAuburnAlabama];
[mapView addAnnotation:chiliAuburnAlabama];
[chiliAuburnAlabama release];
//tutti frutti homewood alabama

CLLocationCoordinate2D tuttifruttiHomewood = mapView.userLocation.coordinate;
tuttifruttiHomewood.latitude = 33.479775 ;
tuttifruttiHomewood.longitude = -86.790977;
CLLocation *tuttifruttiHomewoodLocation = [[CLLocation alloc]initWithLatitude:tuttifruttiHomewood.latitude longitude:tuttifruttiHomewood.longitude];
if(tuttifruttiHomewoodAlabama != nil) {
    [mapView removeAnnotation:tuttifruttiHomewoodAlabama];
    [tuttifruttiHomewoodAlabama release];
    tuttifruttiHomewoodAlabama = nil;
}

tuttifruttiHomewoodAlabama = [[AddressAnnotation alloc] initWithCoordinate:tuttifruttiHomewood];
double distanceMetersTuttifruttiHomewoodAlabama = [mapView.userLocation.location distanceFromLocation:tuttifruttiHomewoodLocation];
double distanceMilesTuttifruttiHomewoodAlabama = distanceMetersTuttifruttiHomewoodAlabama/1609.334;
tuttifruttiHomewoodAlabama.title = @"Tutti Frutti";
tuttifruttiHomewoodAlabama.subtitle = [NSString stringWithFormat:@"%.1f miles away",distanceMilesTuttifruttiHomewoodAlabama];
[mapView addAnnotation:tuttifruttiHomewoodAlabama];




//ignore below
CLLocationCoordinate2D user = mapView.userLocation.coordinate;
region.span = span;
region.center = user;
[mapView setRegion:region animated:TRUE];
[mapView regionThatFits:region];

}
- (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views {
for(MKAnnotationView *annotationView in views) {
    if(annotationView.annotation == mv.userLocation) {
        MKCoordinateRegion region;
        MKCoordinateSpan span;

        span.latitudeDelta=0.1;
        span.longitudeDelta=0.1; 

        CLLocationCoordinate2D location=mv.userLocation.coordinate;

        region.span=span;
        region.center=location;

        [mv setRegion:region animated:TRUE];
        [mv regionThatFits:region];
    }

}
}
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{
MoreInfo *moreInfoView = [[MoreInfo alloc] initWithNibName:@"MoreInfo" bundle:nil];
moreInfoView.title = view.annotation.title ;
//moreInfoView.getDirections = @"";
moreInfoView.getWebsite = [NSURL URLWithString:view.annotation.website];
[self.navigationController pushViewController:moreInfoView animated:YES];




}

- (void)dealloc
{   

[super dealloc];    
}
@end

MoreInfo.h

#import <UIKit/UIKit.h>


@interface MoreInfo : UIViewController {
IBOutlet UITableView *tableView;
NSMutableArray *moreInfo;
 NSURL *getDirections;
 NSURL *getWebsite;
}
-(void)goToWebsite;
@property (nonatomic,retain) NSURL *getDirections;
@property (nonatomic,retain) NSURL *getWebsite;

@end

MoreInfo.m

#import "MoreInfo.h"
#import "FirstViewController.h"

@implementation MoreInfo
@synthesize getDirections;
@synthesize getWebsite;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void)dealloc
{
[super dealloc];
}

- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad {
moreInfo = [[NSMutableArray alloc] init];
[moreInfo addObject:@"Phone Number"];
[moreInfo addObject:@"Address"];
[moreInfo addObject:@"Go to Website"];
[moreInfo addObject:@"Get Directions"];
    [super viewDidLoad];
}
/*- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView    accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath{

}*/
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{


if (indexPath.row == 2) {
    [self goToWebsite];
}



}
-(void) goToWebsite{
[[UIApplication sharedApplication]openURL:getWebsite];
NSLog(@"website is %@", [getWebsite absoluteString]);
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [moreInfo count];

}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
if (section == 0) {
    return @"More Information";
}else return nil;

} 
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}


// Set up the cell...
if(indexPath.section == 0){
    cell.textLabel.text = [moreInfo objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
} return cell;
}
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section{
if(section == 0){
    return @"Touch the Address to Get Directions";
}else return nil;
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end
Idleman answered 1/6, 2011 at 2:54 Comment(0)
D
27

If I understand correctly, you want to add a disclosure button that would allow you to present a new view with information about the current pin annotation. To get a disclosure button, you just need to implement this code:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"];
    if (!pinView) {
        pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"] autorelease];
        pinView.pinColor = MKPinAnnotationColorRed;
        pinView.animatesDrop = YES;
        pinView.canShowCallout = YES;

        UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinView.rightCalloutAccessoryView = rightButton;
    } else {
        pinView.annotation = annotation;
    }
    return pinView;
}

Now when you tap on a pin on the mapView, a disclosure button will display in the presented view. You will then need to use the following method to tell the app what to do when the disclosure button is pressed.

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control

In that method, you can present a popover or modal window or push a view or whatever you would like to do with information about the current location. You don't need to create a new nib for each one, either. The easiest thing to do would be to synthesize values in that view controller such as phoneNumber and website and things like that. Then in the last method there where you present the view, pass the values in as needed. For example,

NewView *vc = [[NewView alloc] initWithNibName:@"NewView" bundle:nil];
vc.phoneNumber = // the phone number of this location;
vc.website = // the website;

and so on before you present the view. I hope this helps

EDIT: To get rid of that error, for everything you synthesize, you must declare in the header. So you'll have

@interface FirstViewController : UIViewController {
    IBOutlet MKMapView  *mapView;
    //stores go here!
    //declare store names as Company *cityState
    AddressAnnotation *chiliAuburnAlabama;
    AddressAnnotation *tuttifruttiHomewoodAlabama;

    NSString *website;
    // the rest of your synthesized attributes you want in the view controller;
}
-(IBAction) updateLocation;
-(IBAction) setMap:(id)sender;
-(IBAction) showPin;

@property (nonatomic, retain) NSString *website;
// This is the property that will get rid of your error and you should do it to any other attributes you want to pass into the controller;
@end

You will want that in the annotation header as well if you use it there. It tells that part of the code that it should expect some string to be sent to it and it will know how to handle storing it.

As for calling your GoToMap method, you should set up a delegate for your MoreInfo class when you create it. So in your MoreInfo header, you'll have, among everything else

@interface MoreInfo .... {
    id delegate;
    // everything else;
}
@property (nonatomic, assign) id delegate;
// your methods and other properties;
@end

Then when you create it in your view controller, you'll have

MoreInfo *moreInfoView = [[MoreInfo alloc] initWithNibName:@"MoreInfo" bundle:nil];
moreInfoView.title = view.annotation.title ;
moreInfoView.delegate = self;
// this assigns the current view controller as its delegate;
//moreInfoView.getDirections = [NSURL URLWithString:[NSString stringWithFormat: @"http://maps.google.com/maps?q=%@@%1.6f,%1.6f&z=10", view.annotation.coordinate.latitude, view.annotation.coordinate.longitude]];
moreInfoView.getWebsite = view.annotation.website;
[self.navigationController pushViewController:moreInfoView animated:YES];

Finally, when you want to call GoToWebsite from your MoreInfo, you can call

[self.delegate GoToWebsite];

This of course is assuming that method is in your first view controller (which I could swear it was, but can't find it all the sudden).

But that's basically how you would go about it

Delphiadelphic answered 1/6, 2011 at 4:33 Comment(40)
okay so i tried that but now my view for the user location isn't working. i added in the function that says the user location above. is there a way to add in the other pins to that?Idleman
In order to get your user location and other pins, you will want to specify classes in the mapView:viewForAnnotation method up top. For example, if ([annotation isKindOfClass:[MKUserLocation class]]) { return nil; } (this should keep your current location from being overwritten). Doing this will let you add different function or colors or whatever you would like to different annotations in case you decide later to have a class for different company types, etc.Delphiadelphic
Come to think of it, the Apple sample application MapCallouts actually uses this idea in their MapViewController.m file, so you could probably use that as a good place to startDelphiadelphic
No problem. Always glad to help. Also, I just realized I forgot to say how to add more points. I'm sure you figured it out already, but all you have to do is create your annotation, then say [myMapView addAnnotation:newAnnotation]; or if you have a group of new annotations, [myMapView addAnnotations:arrayOfAnnotations];Delphiadelphic
actually ive been studying for finals for a while now! so i havent figured that out. So there is away to add more than one point on the map at a time? because so far i was planning on enetering everything with its separate coordinates which would take forever!Idleman
Good luck with your finals. That's one thing I definitely don't miss about school. As for adding more than one point at a time, that second method in my last comment will do just that. All you really need to do is set up a loop to get a bunch of coordinates and create annotations from them, then add them to an array. Once the loop is finished, call that last method and it will add all the annotations to your map at the same timeDelphiadelphic
i only half get what you mean. im really a noob when it comes to programming + this is the first time i've ever played around with map kit. How do i make the loop? because my coordinates have no pattern so if i said like for (i, i=> - (whatever lowest coordinate is), i++) i wouldn't get what i want!Idleman
oh wait, i think i misunderstood what you meant. I have to still manually put in every coordinate but then i can have the annotations make themselves instead of saying addAnnotation:newAnnotationIdleman
Sorry for being unclear, but you got it the second time. If you have specific locations, there is a good chance you will have to input the coordinates manually to your code, but you could probably create an array of them and read from that. Something like for (int i = 0; i < [myCoordinatesArray count]; i++) { // run through all your coordinates to create annotations;. This may not apply to you, but looking into MKReverseGeocoder might be useful later onDelphiadelphic
in your above code, how do i say: vc.website = website stored in annotationIdleman
I assume you're passing from the annotation to the view controller? To do that, just create and synthesize an NSString instance called website. Pass it in with vc.website = annotation.website;. Then when you display the view controller, you'll create a textView with that string as its text, textView.text = website;. Then to make it a clickable link, you'll say [textView setDataDetectorTypes:UIDataDetectorTypeLink];. Then you should be able to click your website link and have it take you to the site in Safari. If you need more explanation about sythesizing the string, let me knowDelphiadelphic
so when i do that i get this error: "property website not found on object of type id <MKAnnotation> but the thing is that i make it a property and synthesize it in my annotation object.Idleman
updated code so you can see my error. i get it at the very end of my FirstViewController.mIdleman
Also, i have detail disclosure buttons on each cell. I want the cell to display Go To Website and i want the button to take you there. I made a method -(void) goToWebsite{ [[UIApplication sharedApplication]openURL:getWebsite]; and i have the text in the cell to = @"Go To Website"; how do i get the - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath to load up the GoToWebsite method?Idleman
I thought you'd know I meant to set up the string in the header too (goes hand in hand with synthesizing), so I'm sorry about that. I should have been more clear. I'm going to edit my answer above to make it easier to type and read what you'll have to doDelphiadelphic
i did set it up in the header? the NSURL *directionsIdleman
oh i see. thanks. so instead of putting it in the AdressAnnotation class i put it in the map class!Idleman
You do have it declared, but only for your custom annotation, so it isn't seen by your view controller. Also, I realized I forgot to tell you how to call your GoToWebsite method, so I'm going to edit really quick to put that in as wellDelphiadelphic
No problem. I'm just happy to help outDelphiadelphic
actually the gotomap is in my more info but i think i figured out how to use it. in the right callout accessorry button tapped method i say if(indexPath.row = (the row the get directions text is in)){[self goToMap]; }Idleman
Yup, that's exactly how you'd do it. Sorry for the confusion there. My brother was hounding me to win a video game race for him, so I wasn't as focused as I should have been. Also, considering you only seem to use MoreInfo for its tableview, have you considered using a TableViewController in its place? It doesn't need a nib file and should streamline what you want to do in itDelphiadelphic
well im just a beginner programmer. i honestly have no idea how i would do that. i cant even get that link to work. If i'm not mistaken you open a link with [[UIApplication sharedApplication]openURL:getWebsite]; -- meaning when i press the button at that row it should execute that, but still nothing is happening. does that not work in simulators or is my coding just wrong? and you dont need to apologize! your doing ME a favor just by answering! -- oh and about the tableview controller -- i actually tried that and it just kept giving me trouble so i went with just using a UIViewIdleman
You'll get the hang of it eventually. I just started this kind of stuff in January, myself, but you learn a lot through experimenting and practice, so you'll be awesome in no time. As far as the link, I'm pretty sure that's how you'd do it, so I'm not sure why it's not working. You might want to put a log statement there to make sure you have a valid website. NSLog(@"website is %@", [getWebsite absoluteString]); should show you a string version of the site you're trying to call. And as for the TableViewController, it would be a good thing to look into later once you're more comfortableDelphiadelphic
so here's what i did moreInfoView.getWebsite =[NSURL URLWithString:@"www.google.com"]; i set it to google just to try to get it to work. it also shows google in the log on button press, but it does not take me to safariIdleman
did you really just start in january!! thats crazy! hopefully i'll get to your level soon enoughIdleman
scratch all that- i guess my link was bad. i copied and pasted the link for this page and it worked! thanks for everything! ill let you know if i run into any more troubleIdleman
bah. sorry to spam with notifications but my original problem is still giving me trouble. i have website declared in both the addressannotation and the firstviewcontroller but it still wont register view.annotation.website. when i give my website a value do i have to make the firstviewcontroller an object and assign it to that?Idleman
I'm glad to hear you figure out what was going on with your openURL issue. And yeah, you'll be great in no time. You learn a lot along the way and find new ways to make your code faster and better. As for your original problem, where exactly in the code are you having trouble? When you are assigning the website or when you are trying to give it to the view controller?Delphiadelphic
when i assign the website i put chiliAuburnAlabama(an object from the class AddressAnnotation).website (which takes a NSString * ill update my code soon) = @"URL of this page just to test"; then later when i am assigning the chiliAuburnAlabama website value to moreInfo.website i write moreInfo.website = [NSURL URLWithString:view.annotation.website]; updating the code nowIdleman
The way you are setting stuff up now, I don't think you'll need the NSString *website, @property (...)...*website and @synthesize website anymore for your FirstViewController class. Doesn't look like you're using it at all outside the annotation and the MoreInfo classes. But where is it giving you trouble? On the moreInfoView.getWebsite = [NSURL URLFromString:view.annotation.website]; line? Or somewhere else?Delphiadelphic
If you want i can post my delegate for you also but all i have in there is my tab bar and navigation controllerIdleman
I completely skipped over it before, but I'm pretty sure I found the problem after closer inspection. MKAnnotation has a specific protocol that includes stuff like title, subtitle and coordinate. You can modify it to include anything you want (i.e. directions, website, etc.). So you set them up as @property... and @synthesize... like you did, but you don't want to have - (NSString *)website { return website; }. Same goes for directions. That kind of method is only for objects in the protocol, which those aren't. Delete those methods and you should be fineDelphiadelphic
how about declaring @class AddressAnnotation in FirstViewController. would that do anything?Idleman
also its saying unable to find website getter methodIdleman
If it can't find the getter method, it sounds like it isn't importing the AddressAnnotation header, so declaring @class AddressAnnotation in the FirstViewController header might do the trick. If not, you may need to create your annotation in a separate file (which is pretty easy to do since you'll just cut and paste) to make sure there's no overlay of information. I can certainly help you through it if it comes to thatDelphiadelphic
where do i put the @class AddressAnnotation? when i put it in the @interface{ (here) } it gets an error as well as if i put it after the methods for the FirstViewController class. i think i should just make a new file no?Idleman
nevermind got the class thing to go on but still getting the error. is there any other way i can feed these links to the more info? maybe make a class called Link with ivar NSString *website put property and synthesize then where i declare all the information for the annotations i can put Link *name =[[Link alloc]init]; -- but then how would i get it to put that link into the bottom? maybe a dictionary? urgh i dont knowIdleman
It would be easier to make a new file, definitely. You would put it between the #import and @interface declarations, if you still want to try thatDelphiadelphic
The way you are doing it is the easiest method. If you want, you can email me a zip file with your project (or just the relevant code) and I can look over the parts I think could be causing the issues and send back a (hopefully) working version with explanation of what was changed. My email is [email protected] if you want to try thatDelphiadelphic
emailing now i really appreciate it!Idleman

© 2022 - 2024 — McMap. All rights reserved.