2012-03-26 84 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