2 mapmapm MapMapM 于 2013.02.18 10:32 提问

DidSelectRowAtIndexPath调用失败

在masterTableView用到三个不同的detailTableViews ,触屏时会调用,但是没有调用成。

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

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}
//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;

}

//JSONmetod

- (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];

}

- (void)didReceiveMemoryWarning
 {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#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

1个回答

gaoXxxing
gaoXxxing   2013.02.18 16:46
已采纳

你的方法声明大写不对

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

应该是:

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

方法的名字是区分大小写的。

另外,关于delegates

self.tableView.delegate = self;
Csdn user default icon
上传中...
上传图片
插入图片