我已将this tutorial实施到我的项目中,但segue无法正常工作!我已经尝试了一切,但单击它时单元格会保持突出显示。我试过在推送中添加一个标识符 - 没有区别。我的标签栏以编程方式添加到我的appdelegate中 - 可能是吗?同样,tableview拒绝正确地适应屏幕,它重叠在状态栏上(几乎所有事情都尝试过)。
tableviewcontroller.h
#import <UIKit/UIKit.h>
@interface TableViewController : UITableViewController
@end
my tableviewcontroller.m
#import "TableViewController.h"
#import "ViewController.h"
#import "AFNetworking.h"
@interface TableViewController ()
@property (strong, nonatomic) NSArray *googlePlacesArrayFromAFNetworking;
@end
@implementation TableViewController
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self makeRestuarantRequests];
self.edgesForExtendedLayout = UIRectEdgeNone;
}
- (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:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
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
我的appdelegate文件(标签栏内容)
- (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 setRootViewController:tbc]; //tab bars
[self.window makeKeyAndVisible];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
return YES;
}
这是调试日志:
单击表格单元格时出现断点错误
答案 0 :(得分:0)
在viewcontroller之间转换,你应该有一个导航控制器。
//Specify viewcontrollers for each tab
MapViewController *mvc = [[MapViewController alloc]init];
TableViewController *evc = [[TableViewController alloc]init];
AboutViewController *avc = [[AboutViewController alloc]init];
UINavigationController* mvcNavi = [[UINavigationController alloc] initWithRootViewController: mvc];
UINavigationController* evcNavi = [[UINavigationController alloc] initWithRootViewController: evc];
UINavigationController* avcNavi = [[UINavigationController alloc] initWithRootViewController: avc];
[tbc setViewControllers:[NSArray arrayWithObjects: mvcNavi, evcNavi, avcNavi, nil]];
您应该在tableview中实现方法:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//Alloc/init detailView
UIViewController *detailView = [UIViewController alloc]init];
detailView.restaurantDetail = [self.googlePlacesArrayFromAFNetworking objectAtIndex:indexPath.row];
[self.navigationController pushViewController:detailView animated:YES];
}
p / s:以编程方式创建视图时,不要通过segue更改视图,因此请删除prepareForSegue
答案 1 :(得分:0)
如果您使用segue,则此代码可以提供帮助:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Assume self.view is the table view
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
DetailObject *detail = [self detailForIndexPath:path];
[segue.destinationViewController setDetail:detail];
}
从这里开始:Use didSelectRowAtIndexPath or prepareForSegue method for UITableView?