2012-03-26 86 views
2

我想打电话从一个UITableView列表中的细节画面 - 但代表不被称为在接收视图 - 我会后的所有代码:的UITableViewDelegate不会被调用

列表头文件:

#import <UIKit/UIKit.h> 
#import "tank.h" 

@class iTanksV2ListViewController; 
@protocol iTanksV2ListViewControllerDelegate 
    - (void) iTanksListViewController:(iTanksV2ListViewController *) sender choseTank:(tank *)tank; 
@end 

@interface iTanksV2ListViewController : UITableViewController 
@property (nonatomic, strong) NSArray *tanks; 
@property (weak, nonatomic) IBOutlet UITableView *tankTableView; 
@property (weak, nonatomic) id <iTanksV2ListViewControllerDelegate> delegate; 
@end 

及m文件:

#import "iTanksV2ListViewController.h" 
#import "tank.h" 
#import "tankDetailViewController.h" 

@interface iTanksV2ListViewController() 

@end 

@implementation iTanksV2ListViewController 
@synthesize tanks = _tanks; 
@synthesize tankTableView = _tankTableView; 
@synthesize delegate = _delegate; 


- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Uncomment the following line to preserve selection between presentations. 
    // self.clearsSelectionOnViewWillAppear = NO; 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem; 
} 

- (void)viewDidUnload 
{ 
    [self setTankTableView:nil]; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // Return the number of sections. 
    return 1;//keep this section in case we do need to add sections in the future. 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    return [self.tanks count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Tank List Table Cell"; 
    UITableViewCell *cell = [self.tankTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (!cell) 
    { 
     cell = [[UITableViewCell alloc] initWithFrame:CGRectZero]; 
    } 
    tank *thisTank = [self.tanks objectAtIndex:indexPath.row]; 
    cell.textLabel.text = thisTank.tankNumber; 
    return cell; 
} 

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier isEqualToString:@"Show Tank Details"]) 
    { 

    } 
} 

#pragma mark - Table view delegate 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    tank *thisTank = [self.tanks objectAtIndex:indexPath.row]; 
    [self.delegate iTanksListViewController:self choseTank:thisTank]; 

} 

@end 

和用于接收文件中的标题:

#import <UIKit/UIKit.h> 
#import "tankGauge.h" 
#import "tank.h" 

@interface tankDetailViewController : UIViewController 
@property (weak, nonatomic) IBOutlet UILabel *tankNumberLabel; 
@property (weak, nonatomic) IBOutlet UILabel *tankProductLabel; 
@property (weak, nonatomic) IBOutlet UILabel *tankAvailableProductLabel; 
@property (weak, nonatomic) IBOutlet UILabel *tankMaxVolumeLabel; 
@property (weak, nonatomic) IBOutlet tankGauge *tankVolumeGauge; 
@property (weak, nonatomic) tank* tankToShow; 
@end 

...和M档:

#import "tankDetailViewController.h" 
#import "iTanksV2ListViewController.h" 

@interface tankDetailViewController() <iTanksV2ListViewControllerDelegate> 

@end 

@implementation tankDetailViewController 
@synthesize tankNumberLabel = _tankNumberLabel; 
@synthesize tankProductLabel = _tankProductLabel; 
@synthesize tankAvailableProductLabel = _tankAvailableProductLabel; 
@synthesize tankMaxVolumeLabel = _tankMaxVolumeLabel; 
@synthesize tankVolumeGauge = _tankVolumeGauge; 
@synthesize tankToShow = _tankToShow; 


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

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 

-(void)iTanksListViewController:(iTanksV2ListViewController *)sender choseTank:(id)tank 
{ 
    self.tankToShow = tank; 
    self.tankNumberLabel.text = self.tankToShow.tankNumber; 
} 

- (void)viewDidUnload 
{ 
    [self setTankNumberLabel:nil]; 
    [self setTankProductLabel:nil]; 
    [self setTankAvailableProductLabel:nil]; 
    [self setTankMaxVolumeLabel:nil]; 
    [self setTankVolumeGauge:nil]; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

@end 

回答

3

tankTableViewIBOutlet,所以你只需要连接您的tableView的委托和数据源到您File's Ownerxib如下图所示: enter image description here

+0

我刚刚检查过,我认为这是完成的 - 委托和数据源都设置为itanksv2listviewcontroller:-S是否正确? – HillInHarwich 2012-03-26 09:57:48

+0

绝对!你是以编程方式或通过'xib'设置它们吗? – tipycalFlow 2012-03-26 10:03:59

+0

他们正在通过故事板,我想!我对此很陌生,现在看起来很复杂! :-S – HillInHarwich 2012-03-26 10:14:04

0

你有设置视图控制器为委托为实现代码如下?

+0

我是这么认为的!在视图控制器的实现 - 视图中的最后一段代码... – HillInHarwich 2012-03-26 09:49:44