2012-08-11 8 views
12

Ich habe eine benutzerdefinierte UITableViewCell, EventCell genannt.Benutzerdefiniert UITableViewCell nicht aufrufen PreparateForSegue

EventCell.h

#import <UIKit/UIKit.h> 

@interface EventCell : UITableViewCell 

@property (nonatomic, strong) IBOutlet UILabel *titleLabel; 
@property (nonatomic, strong) IBOutlet UILabel *locationLabel; 
@property (nonatomic, strong) IBOutlet UILabel *dateLabel; 
@property (nonatomic, strong) IBOutlet UILabel *typeLabel; 
@end 

EventCell.m

#import "EventCell.h" 

@implementation EventCell 

@synthesize titleLabel, locationLabel, dateLabel, typeLabel; 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

@end 

Hier ist, wie ich meine Zelle bin einrichten.

EventsMasterViewController.m

- (EventCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    Event *myEvent; 
    NSString *CellIdentifier = @"EventCell"; 
    EventCell *cell = (EventCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 


    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"EventCell" owner:nil options:nil]; 

    for (id currentObject in topLevelObjects) 
    { 
     if ([currentObject isKindOfClass:[EventCell class]]) 
     { 
      cell = (EventCell *)currentObject; 
      break; 
     } 
    } 

    myEvent = [self.myEventsDataController objectInListAtIndex:indexPath.row]; 

    cell.titleLabel.text = myEvent.name; 
    cell.locationLabel.text = myEvent.location; 
    cell.typeLabel.text = @"Social"; 
    cell.layer.borderColor = [UIColor blackColor].CGColor; 
    cell.layer.borderWidth = 1.0; 

    return cell; 
} 

Die Zelle groß formatiert wird, sieht es genau so, wie ich es brauchen. Aber wenn ich darauf klicke, wird die Zelle blau hervorgehoben und wechselt nicht zur nächsten Ansicht. Ich habe einen Breakpoint in meine preparedForSegue-Methode eingefügt und es wird nicht einmal aufgerufen.

Gibt es eine Möglichkeit, PrepareForSegue manuell aufzurufen? Wenn ja, wo soll ich das machen?

+0

Was ist mit Ihrem 'tableView: didSelectRowAtIndexPath:'? – Desdenova

+0

Ich habe keine Methode namens, müsste ich das implementieren? – ardavis

+0

Von dem, was ich lese, verwenden wir 'prepareForSegue' anstelle von' didSelectRowAtIndexPath'? – ardavis

Antwort

25

Sie implementieren müssen

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



[self performSegueWithIdentifier:@"YourSegueIdentifier" sender:nil]; 


} 
+1

Beachten Sie, dass sowohl didSelectRowAtIndexPath: und prepareForSegue: sind Methoden von UIViewController und nicht von UITableViewCell – Brabbeldas

1

Wie oben erwähnt, Sie didSelectRowAtIndexPath verwenden müssen, wenn Sie einen segue in das Storyboard zu einem neuen UIViewController konfigurieren. Dadurch können Sie die prepareForSegue-Funktion anstelle des programmgesteuerten Aufrufs performSegueWithIdentifier verwenden.

Hoffe, dass hilft es aufzuräumen!

+0

Ich glaube nicht, dass 'didSelectRowAtIndex' eine Funktion ist. Bitte überprüfen Sie Ihre Antwort und korrigieren Sie den Funktionsnamen, falls dieser falsch ist. – Donovan

+0

Sieht so aus, als hätte ich den Weg am Ende verpasst. Vielen Dank! – heckman

1

Mein Problem war die Zellkennung.

in - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath So erklärte ich static NSString *cellIdentifier = @"cell"; und dann in der Storyboard habe ich diese Kennung in hier:

enter image description here

Und Sie hier gehen!

4

Sie sollten nicht habendidSelectRow für diese umzusetzen zu arbeiten - von einer Zelle in eine andere Ansicht Controller Steuer ziehen sollte eine segue erstellen, die funktioniert, wenn die Zelle tippen.

In meinem Fall war das Problem, dass der Storyboard-Editor das Segment falsch erstellte. Ich hatte zwei sehr ähnliche Storyboards, gearbeitet wurde und der andere nicht, und auf den Quellcode suchen (Rechtsklick auf das Storyboard-Datei und wählen Öffnen als ->Source Code), habe ich diesen:

<segue destination="UWX-rF-KOc" kind="replace" identifier="showStory" trigger="accessoryAction" splitViewControllerTargetIndex="1" id="Gly-La-KIe"/> 

Beachten Sie das trigger Attribut. Dies deutet darauf hin, dass der Übergang aus der Nebenaktion der Zelle ausgelöst wird.Sie können auch diese von den Anschlüssen Inspektor der Zelle sehen:

enter image description here

das Entfernen und das Segue ersetzt durch von der „Selektion“ Ziehen Griff oben statt Steuer-Ziehen aus der Zelle gab mir die richtige segue .

Ich bin mir nicht sicher, was es mit dieser bestimmten Zelle ist, die Control-Drag-Verbindung mit der Accessory-Aktion anstelle der Auswahl Aktion macht, aber da gehen Sie.

+0

danke für den Vorschlag, ich hatte das gleiche Problem !! :) – Pangu

Verwandte Themen