Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

busabres31

macrumors newbie
Original poster
Feb 29, 2012
6
0
Hello all. Having a problem calling an URL from a SQLlite DB. I have currently have the DB working calling text fields from the DB but can't get the URL to be called into the UITableViewCell
Code:
case 0: cell.textLabel.text = animalDetail.animalName; break;
case 1: cell.textLabel.text = animalDetail.type; break;
case 2: cell.textLabel.text = animalDetail.website; break;
In the SQLite DB I have 3 fields
Name (data examples: Bengal Tiger, Dolphin...)
Type (data examples: Big Cats, Ocean Animals....)
WebSite (data examples: http://animals.nationalgeographic.com/animals/mammals/bengal-tiger)

I get the returns in the table cells correctly organized and in the correct labels but when it comes to an URL with a press able hyperlink I can't get it working, only a return of the text link. How can I get the field to come back as a hyperlink?

Any help would be appreciate it. Thanks all.

-Busabres31
 
I may not be the person to answer this and I can't remember the exact terminology, but there is a way you can enable "recognizers" in text fields that will automatically look for things like URls, addresses, phone numbers, etc. and enable them for taps so that they will open in their respective applications. I think that is what you are looking for
 
I would think adding the proper code to the didSelectRowAtIndexPath: delegate method would probably be the easiest. Otherwise, if you really want a hyperlink, you'll need a webView.
 
This is the didSelectRowAtInexPath code within my AnimalViewController.m. For some reason I can't find a straight forward explanation on how to make an entry in SQLite DB a hyperlink. Any help would be appreciated:

Code:
#import "AnimalViewController.h"
#import "AnimalHouse.h"
#import "AnimalDetail.h"
#import "AnimalDataController.h"

static sqlite3_stmt *selectAnimal_statement = nil;

@implementation AnimalViewController

@synthesize aAnimalHouse, listOfAnimals;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
	if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
		// Initialization code
	}
	return self;
}

 //If you need to do additional setup after loading the view, override viewDidLoad.
- (void)viewDidLoad {
	
}

- (void)viewWillAppear:(BOOL)animated { 
	
	self.title = aAnimalHouse.animalHouseName;
	[tableView reloadData];
	
}

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


- (void)didReceiveMemoryWarning {
	[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
	// Release anything that's not essential, such as cached data
}

-(NSInteger)tableView:(UITableView *)tv numberOfRowsInSection:(NSInteger)section {

	return self.listOfAnimals.count;
}

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

	UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
    if (cell == nil) {
        // Create a new cell. CGRectZero allows the cell to determine the appropriate size.
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyIndentifier"];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        
    }
	
	//Get the object and write out the animal name.
	AnimalDetail *cd = [self.listOfAnimals objectAtIndex:indexPath.row];
	cell.textLabel.text = cd.animalName; cell.textLabel.numberOfLines = 3;
	
	return cell;
}

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 
	 if(cdController == nil)
		 cdController = [[DataController alloc] initWithNibName:@"AnimalData" bundle:nil];
	 
	 cdController.animalDetail = [self.listOfAnimals objectAtIndex:indexPath.row];
	 
	 [self.navigationController pushViewController:cdController animated:YES];
 }

-(void)setAAnimalHouse:(AnimalHouse *)ch {

	if(aAnimalHouse == nil)
		aAnimalHouse = [[NSMutableArray alloc] init];
	
	aAnimalHouse = ch;
	
	[self getListOfAllAnimalsForThisAnimalHouse:aAnimalHouse.animalHouseID];
}


- (void)getListOfAllAnimalsForThisAnimalHouse:(NSInteger)animalHouseID {

	//get the data from the database and fill the array.
	self.listOfAnimals = [[NSMutableArray alloc] init];
	sqlite3 *database;
	
	//Get the database and connect to it.
	NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
	NSString *documentsDirectory = [paths objectAtIndex:0];
    //#1 Change
	//NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"SQLNavigation.sql"];
	NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"AnimalInfo.sqlite"];
	
	//open the database
	if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)
	{

		const char *sql = "select id, animal, continent, type, typesoffered, reqs, scores, sizein, sizeout, totalin, totalout, website, comments from animals where continentid=?";
		int returnValue;
		
		if(selectAnimal_statement == nil)
			returnValue = sqlite3_prepare_v2(database, sql, -1, &selectAnimal_statement, NULL);
		
		sqlite3_bind_int(selectAnimal_statement, 1, animalHouseID);
		while(sqlite3_step(selectAnimal_statement) == SQLITE_ROW)
		{
			//populate the object with the data.
			AnimalDetail *cd = [[AnimalDetail alloc] init];
				
			cd.animalDetailID = sqlite3_column_int(selectAnimal_statement, 0);
			cd.animalName = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectAnimal_statement, 1)] copy];
            //Added objects to facilitate additional data...
            cd.continent = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectAnimal_statement, 2)] copy];
            cd.type = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectAnimal_statement, 3)] copy];
            cd.typesoffered = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectAnimal_statement, 4)] copy];
            cd.reqs = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectAnimal_statement, 5)] copy];
            cd.scores = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectAnimal_statement, 6)] copy];
            cd.sizein = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectAnimal_statement, 7)] copy];
            cd.sizeout = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectAnimal_statement, 8)] copy];
            cd.totalin = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectAnimal_statement, 9)] copy];
            cd.totalout = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectAnimal_statement, 10)] copy];
            cd.website = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectAnimal_statement, 11)] copy];
            cd.comments = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectAnimal_statement, 12)] copy];
				
			//Add the object to the array.
			[self.listOfAnimals addObject:cd];
		}
		//Reset the statement, so it can be used again.
		sqlite3_reset(selectAnimal_statement);
	}
	//Close the connection.
	else
		sqlite3_close(database);
}

- (void)dealloc {
}


@end
 
For some reason I can't find a straight forward explanation on how to make an entry in SQLite DB a hyperlink.

Probably because there is no straight-forward answer. UIKit is not an HTML-based framework so there's no simple way, outside of a UIWebView, to "make an entry a hyperlink", where "entry" means, presumably, an NSString that happens to contain a URL.

If you want this hyperlink to appear and act like a regular hyperlink, with underlined, colored text, I would suggest (one simple way would be) encoding it as an HTML link in a UIWebView.

If you simply want to display the URL as plain text in your table cell, I would suggest setting the textLabel to the URL and then, in didSelectRowAtIndexPath:, detecting that a URL row was clicked and opening a browser (either internally or redirecting to mobile Safari) using the desired URL.
 
No it's definitely not straight forward but thank you for the advise. Still trying to figure out a good way to code this. The search continues...:)
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.