2016-05-12 27 views
0

Ich versuche in diesen Dateien Artikel zum Warenkorb hinzuzufügen. Ich habe benutzerdefinierte Tabellenzelle und verknüpfte sie mit IBOutlets im Storyboard. Irgendwie erreicht der Debugger die delegate-Methode innerhalb des deletegating-Objekts, geht jedoch nicht weiter zu TableVC, wo diese Methode konform ist und keine Protokolle angezeigt werden.TableViewCellDelegate wird nicht aufgerufen

// SeatTableViewCell.h 
#import <UIKit/UIKit.h> 
#import "SeatTableViewCellDelegate.h" 

@interface SeatTableViewCell : UITableViewCell 
@property (nonatomic, assign) id<SeatTableViewCellDelegate> delegate; 
@property (nonatomic, weak) IBOutlet UILabel *rowLabel; 
@property (nonatomic, weak) IBOutlet UILabel *seatLabel; 
@property (nonatomic, weak) IBOutlet UILabel *priceLabel; 
@property (nonatomic, weak) IBOutlet UIImageView *addToBasketImageView; 
@end 

// SeatTableViewCell.m 
#import "SeatTableViewCell.h" 
@implementation SeatTableViewCell 
@synthesize rowLabel, seatLabel, priceLabel, addToBasketImageView; 
- (void)awakeFromNib { 
    [super awakeFromNib]; 

    UITapGestureRecognizer *singleImageTap = [[UITapGestureRecognizer alloc] initWithTarget: 
               self action:@selector(addToBasketTapDetected:)]; 
    singleImageTap.numberOfTapsRequired = 1; 
    [self.addToBasketImageView addGestureRecognizer:singleImageTap]; 
} 

- (void)addToBasketTapDetected: (UIGestureRecognizer *)sender { 
    //HERE the debugger stops, after step into nothing happens 
    [self.delegate tableViewCell:self didSelectImageView:self.addToBasketImageView]; 
} 
- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 
@end 
// SeatTableViewCellDelegate.h 
@protocol SeatTableViewCellDelegate <NSObject> 

- (void)tableViewCell:(UITableViewCell *)cell didSelectImageView:(UIImageView *)imageView; 

@end 

// ChooseSeatTableViewController.h 
#import <UIKit/UIKit.h> 
#import "SeatGroup.h" 
#import "SeatTableViewCellDelegate.h" 
@interface ChooseSeatTableViewController : UIViewController<UITableViewDataSource, UITableViewDelegate, SeatTableViewCellDelegate> 
- (IBAction)onBackPressed:(id)sender; 
- (IBAction)OnChooseSectorClicked:(id)sender; 
-(void)reloadData:(SeatGroup *)selectedSeatGroup; 
@property (weak, nonatomic) IBOutlet UITableView *tableView; 
@property (nonatomic, strong) SeatGroup *seatGroup; 
@property (nonatomic, strong) NSString* perfUUID; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *tableHeightConstraint; 
@property (nonatomic, strong) NSMutableArray* seats; 
@end 

// ChooseSeatTableViewController.m 
#import "ChooseSeatTableViewController.h" 
#import "ConcertDescriptionViewController.h" 
#import "SeatTableViewCell.h"  
@interface ChooseSeatTableViewController() 
@property (nonatomic, strong) NSMutableArray *selectedIndexPathes; 
@property (strong) Seat* currentSeat; 
@end 

@implementation ChooseSeatTableViewController 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    int volume = self.seats.count; 
    return volume; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    _currentSeat = [_seats objectAtIndex:indexPath.row]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *identifier = @"seatCell"; 
    //todo try fix bug with dequing indexes 
    SeatTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath]; 

    Seat *cur = [_seats objectAtIndex:indexPath.row]; 
    _currentSeat = cur; 
    cell.rowLabel.text = cur.rowNum; 
    cell.seatLabel.text = cur.seatNum; 
    NSArray* piecesOfPrice = [cur.price componentsSeparatedByString: @","]; 
    if (piecesOfPrice.count > 1) { 
     cur.price = [piecesOfPrice objectAtIndex:0]; 
    } 
    NSMutableString *prm = [cur.price mutableCopy]; 
    [prm appendString:@" p"]; 
    cell.priceLabel.text = prm; 

     [cell.addToBasketImageView setUserInteractionEnabled:YES]; 

    if ([self.selectedIndexPathes containsObject:indexPath]) { 
     //set basket selected 
     NSString *thePath = [[NSBundle mainBundle] pathForResource:@"rectangle_21_copy_5" ofType:@"png"]; 
     UIImage *priceBckgImg = [[UIImage alloc] initWithContentsOfFile:thePath]; 
     cell.addToBasketImageView.image = priceBckgImg; 
    } else { 
     //set basket unselected 
     NSString *thePath = [[NSBundle mainBundle] pathForResource:@"rectangle_21_copy_6" ofType:@"png"]; 
     UIImage *priceBckgImg = [[UIImage alloc] initWithContentsOfFile:thePath]; 
     cell.addToBasketImageView.image = priceBckgImg; 
    } 

    return cell; 
} 

- (void)tableViewCell:(UITableViewCell *)cell didSelectImageView:(UIImageView *)imageView { 
    //HERE the debugger doesnt reach 
    NSLog(@"Hi, debugger in didSelectImageView"); 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    if (![self.selectedIndexPathes containsObject:indexPath]) { 
     [self.selectedIndexPathes addObject:indexPath]; 
    } 
    NSString *thePath = [[NSBundle mainBundle] pathForResource:@"rectangle_21_copy_5" ofType:@"png"]; 
    UIImage *priceBckgImg = [[UIImage alloc] initWithContentsOfFile:thePath]; 
    [imageView setImage:priceBckgImg]; 
    [self.tableView reloadData]; 
} 

.. Warum aufgerufen wird mein Protokoll isn?

+1

stellen Sie sicher, Ihre Stellvertretung – Rajesh

+0

im Debugger ist nicht gleich Null helfen kann ich 0, aber nicht null _delegate \t id \t 0x0 \t 0x00000000 – AlexInspired

+0

was bedeutet, dass Sie kein Objekt haben. Dies ist eine sehr grundlegende Frage. Es wird nicht ermutigt, solche Fragen hier zu stellen. – Rajesh

Antwort

1

Sie haben Ihre View-Controller als Delegierter setzen:

1

AlexInspired,

Die einzige Erklärung fehlt, ist in cellForRowAtIndexPath :)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *identifier = @"seatCell"; 
    //todo try fix bug with dequing indexes 
    SeatTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath]; 

    Seat *cur = [_seats objectAtIndex:indexPath.row]; 
    _currentSeat = cur; 
    cell.rowLabel.text = cur.rowNum; 
    cell.seatLabel.text = cur.seatNum; 
    cell.delegate = self; 
    .... 
    return cell; 
} 
1

Sie hat keine Delegierten Tabellenansichtszelle

Set Delegate und genießen :) Ihr Problem ist gelöst.

cell.delegate = self 
1

Sie vergessen, delegate auf self zu setzen. so in cellForRowAtIndexPath Satz Delegaten selbst wie,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
     NSString *identifier = @"seatCell"; 
//todo try fix bug with dequing indexes 
    SeatTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath]; 

     cell.delegate = self; 

} 

durch das Sie zuweisen aktuelles Klassenobjekt zu Zellklasse so können Sie in der Lage aktuelle Klassenmethode von Zellklasse nennen.

:)

1
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *identifier = @"seatCell"; 
    //todo try fix bug with dequing indexes 
    SeatTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath]; 
cell.delegate=self; 
. 
. 
. 
1

schreiben folgenden Code in cellForRowAtIndexPath Methode wird es für Sie

NSString *cellDdentifier = @"seatCell"; 
SeatTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath]; 
cell.delegate = self