没有调用DidSelectRowAtIndexPath

时间:2013-02-15 21:08:20

标签: iphone uitableview tableview segue uistoryboardsegue

我有3个不同的detailTableViews,我的masterTableView中的单元格在触摸时会调用。

请参阅我的master.m文件:

#import "GuideTableViewController.h"
#import "GuideDetailTableViewController.h"
#import "GuideDetailTableViewController2.h"
#import "GuideDetailTableViewController3.h"
#import <QuartzCore/QuartzCore.h>

@interface GuideTableViewController (){

    NSMutableData *weatherResponseData;

    NSArray *headGuide;

    NSArray *leftImages;

}

@property (weak, nonatomic) IBOutlet UITableView *tableView;

@property (weak, nonatomic) IBOutlet UIImageView *imgHeader;

@property (weak, nonatomic) IBOutlet UIImageView *ImgTitle;

@property (weak, nonatomic) IBOutlet UIImageView *ImgWeather;

@property (weak, nonatomic) IBOutlet UIButton *btnMap;

@property (weak, nonatomic) IBOutlet UILabel *LabelWeather;

@property (weak, nonatomic) IBOutlet UILabel *LabelWeather2;

@end

@implementation GuideTableViewController


//Weather method

- (void) loadWeather{

    NSURLRequest *theRequest = [NSURLRequest requestWithURL:
                                [NSURL  URLWithString:@"http://api.wunderground.com/api/3919480da5014c98/conditions/q/BR/Sao_Sebastiao .json"]];
    NSURLConnection *theConnection=[[NSURLConnection alloc]
                                initWithRequest:theRequest delegate:self];
    if(theConnection){
        weatherResponseData = [[NSMutableData alloc] init];
    } else {
        NSLog(@"failed");
    }
}

//Delegates for WeatherData

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse  *)response
{
    [weatherResponseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [weatherResponseData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSString *msg = [NSString stringWithFormat:@"Failed: %@", [error description]];
    NSLog(@"%@",msg);
}


- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSError *myError = nil;
    NSDictionary *res = [NSJSONSerialization JSONObjectWithData:weatherResponseData options:NSJSONReadingMutableLeaves  error:&myError];
    NSArray *results =  [res objectForKey:@"current_observation"];
    NSString *cur = [results valueForKey:@"weather"];
    NSString *tmp = [results valueForKey:@"temperature_string"];
    NSString *wind = [results valueForKey:@"wind_string"];

    NSLog(@"Current conditions: %@, %@º, %@", cur, tmp, wind);

    self.LabelWeather.text = cur;

    self.LabelWeather2.text = tmp;
}


//JSONmethod

- (void) loadJSON{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //code
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://dl.dropbox.com/u/100670549/guide.json"]];

        NSError *error;

        if (data)
         {
            headGuide = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];

            for (NSDictionary *dictionary in headGuide){
               // NSLog([dictionary description]);
            }

        }else
        {
             NSLog(@"Could not load data");
        }

        dispatch_sync(dispatch_get_main_queue(), ^{
             // code

            [self.tableView reloadData];
        });
    });
}


//Load

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.


    [self loadJSON];
    [self loadWeather];

    leftImages = [NSArray arrayWithObjects:@"btn_Stay.png", @"btn_Eat.png", @"btn_Todo.png", nil];


    // set background
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background.jpg"]];

    // rounded corners

    [self.tableView.layer setCornerRadius:9.0];

    [self.ImgWeather.layer setCornerRadius:9.0];
}


#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 headGuide.count;
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];


    NSArray *dict = [headGuide objectAtIndex:indexPath.row];

    cell.textLabel.text = [dict valueForKey:@"title"];

    NSString *cellImage = [leftImages objectAtIndex:indexPath.row];
    UIImage *cellIcon = [UIImage imageNamed:cellImage];

    cell.imageView.image = cellIcon;

    return cell;
}


- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"whereStay"]){
        GuideDetailTableViewController *vc = [segue destinationViewController];
        NSIndexPath *index = sender;
        NSDictionary *dict = [headGuide objectAtIndex:index.row];
        vc.stayGuide = dict;
    }
    else if ([segue.identifier isEqualToString:@"whereEat"]){
         GuideDetailTableViewController2 *vc1 = [segue destinationViewController];
         NSIndexPath *index = sender;
         NSDictionary *dict = [headGuide objectAtIndex:index.row];
        vc1.eatGuide = dict;
    }
    else if ([segue.identifier isEqualToString:@"whatTodo"]){
        GuideDetailTableViewController3 *vc2 = [segue destinationViewController];
        NSIndexPath *index = sender;
        NSDictionary *dict = [headGuide objectAtIndex:index.row];
        vc2.todoGuide = dict;
    }
}


#pragma mark - tableView delegate

- (void)tableView:(UITableView *)tableView didselectRowAtIndexPath:(NSIndexPath       *)indexPath{
    if(indexPath.row == 0){
        [self performSegueWithIdentifier:@"whereStay" sender:indexPath];
    }else if(indexPath.row ==1 ){
        [self performSegueWithIdentifier:@"whereEat" sender:indexPath];
    }else{
         [self performSegueWithIdentifier:@"whatTodo" sender:indexPath];
     }

    [tableView setAllowsSelection:YES];
}

@end

3 个答案:

答案 0 :(得分:2)

您的方法签名也没有正确大写:

- (void)tableView:(UITableView *)tableView didselectRowAtIndexPath:(NSIndexPath       *)indexPath{

应该是

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath       *)indexPath{

方法名称区分大小写。

此外,请确保使用

设置tableView的委托
self.tableView.delegate = self;

答案 1 :(得分:1)

看起来您将此对象设置为表视图的委托。在-viewDidLoad方法中,您应该致电[[self tableView] setDelegate:self];

答案 2 :(得分:1)

tableview委托和数据源的协议在哪里?

@interface GuideTableViewController : UIViewController <UITableViewDataSource,UITableViewDelegate>
{
//Attributes...
IBOutlet UITableView *tableView;
}

在viewDidLoad中,您应该设置委托:

tableView.delegate = self;
tableView.dataSource = self;

你也可以在xib文件中设置代理...

所以你的代表方法应该有效......请查看关于tableview的苹果文档: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html