I've implemented this tutorial into my project but instead of showing the arrow on the right hand side and clicking through to the detailview, the table takes up the whole view (even over the status bar) and does not show the arrows or push through. Is it because of the tab bar I used? I put this in programmatically in the appdelegate file.
my tableviewcontroller.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self makeRestuarantRequests];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)makeRestuarantRequests
{
NSURL *url = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api/place/textsearch/json?query=restuarants+in+greenwich&sensor=false&key=AIzaSyD-kWneJACswSQfMFQ7sxRPhAEZpHHgvnw"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//AFNetworking asynchronous url request
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
self.googlePlacesArrayFromAFNetworking = [responseObject objectForKey:@"results"];
NSLog(@"The Array: %@",self.googlePlacesArrayFromAFNetworking);
[self.tableView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Request Failed: %@, %@", error, error.userInfo);
}];
[operation start];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [self.googlePlacesArrayFromAFNetworking count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
NSDictionary *tempDictionary= [self.googlePlacesArrayFromAFNetworking objectAtIndex:indexPath.row];
cell.textLabel.text = [tempDictionary objectForKey:@"name"];
if([tempDictionary objectForKey:@"rating"] != NULL)
{
cell.detailTextLabel.text = [NSString stringWithFormat:@"Rating: %@ of 5",[tempDictionary objectForKey:@"rating"]];
}
else
{
cell.detailTextLabel.text = [NSString stringWithFormat:@"Not Rated"];
}
return cell;
}
#pragma mark - Prepare For Segue
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
ViewController *detailViewController = (ViewController *)segue.destinationViewController;
detailViewController.restaurantDetail = [self.googlePlacesArrayFromAFNetworking objectAtIndex:indexPath.row];
}
@end
my appdelegate file (tab bar stuff)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//Add tab bar
UITabBarController *tbc = [[UITabBarController alloc]init];
//Specify viewcontrollers for each tab
MapViewController *mvc = [[MapViewController alloc]init];
TableViewController *evc = [[TableViewController alloc]init];
AboutViewController *avc = [[AboutViewController alloc]init];
//Label for tabs
[mvc.tabBarItem setTitle:@"Map"];
[evc.tabBarItem setTitle:@"Eat"];
[avc.tabBarItem setTitle:@"About"];
[mvc.tabBarItem setImage:[UIImage imageNamed:@"103-map.png"]];
[evc.tabBarItem setImage:[UIImage imageNamed:@"125-food.png"]];
[avc.tabBarItem setImage:[UIImage imageNamed:@"28-star.png"]];
[tbc setViewControllers:[NSArray arrayWithObjects:mvc, evc, avc, nil]];
//Add the view controller's view to the window and display.
[self.window addSubview:viewController.view];
[self.window makeKeyAndVisible];
[self.window setRootViewController:tbc]; //tab bars
return YES;
}
In addition to nsuinteger's answer, the problem with the table cell's detailLabel
is that you're not specifying the correct style of table view cell:
// default style
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
You want UITableViewCellStyleSubtitle
styled cells and you probably also want to set the accessoryType
property, too, for the disclosure indicator:
// subtitle style
cell = [[[UITableViewCell alloc] UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;