2012-08-11 16 views
12

Mam niestandardowy UITableViewCell, o nazwie EventCell.Niestandardowe UITableViewCell nie wywoływanie prepareForSegue

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 

Oto jak ja skonfigurowaniu komórki.

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; 
} 

komórka jest sformatowana wielki, wygląda dokładnie tak, jak ja potrzebuję go. Ale po kliknięciu na nią komórka podświetla się na niebiesko i nie przenosi się do następnego widoku. Umieściłem punkt przerwania w metodzie prepareForSegue i nie jest on nawet wywoływany.

Czy istnieje sposób ręcznego wywołania metody prepareForSegue? Jeśli tak, to gdzie mam to zrobić.

+0

Co z twoją 'tableView: didSelectRowAtIndexPath:'? – Desdenova

+0

Nie mam metody o nazwie, czy muszę to zaimplementować? – ardavis

+0

Z tego, co czytam, nie używamy 'prepareForSegue' zamiast' didSelectRowAtIndexPath'? – ardavis

Odpowiedz

25

Trzeba wdrożyć

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



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


} 
+1

Zauważ, że zarówno didSelectRowAtIndexPath: jak i prepareForSegue: są metodami UIViewController, a nie UITableViewCell – Brabbeldas

1

Jak wspomniano powyżej, należy użyć didSelectRowAtIndexPath chyba skonfigurować segue w swojej serii ujęć do nowego UIViewController. Dzięki temu można korzystać z funkcji prepareForSegue zamiast programowego wywołania performSegueWithIdentifier.

Mam nadzieję, że pomoże to usunąć!

+0

Nie uważam, że 'didSelectRowAtIndex' jest funkcją. Sprawdź poprawność odpowiedzi i popraw nazwę funkcji, jeśli jest ona nieprawidłowa. – Donovan

+0

Wygląda na to, że przegapiłem ścieżkę na końcu. Dzięki! – heckman

1

Moim problemem był identyfikator komórki.

Więc w - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath oświadczyłem static NSString *cellIdentifier = @"cell"; a następnie w serii ujęć dodałem tego identyfikatora tu:

enter image description here

A tu proszę!

4

Nie powinien mieć wdrożyć didSelectRow dla tej pracy - kontrola-przeciąganie z komórki do innego kontrolera widoku powinny tworzyć segue, który działa, gdy dotykając komórkę.

W moim przypadku problem polegał na tym, że edytor storyboardów niewłaściwie tworzył segue. Miałem dwie bardzo podobne storyboardy, jeden pracował, a drugi nie, i patrząc na kodzie źródłowym (prawy przycisk myszy na pliku i wybierz ujęć Otwórz jako ->Source Code), widziałem to:

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

Uwaga na atrybut trigger. Sugeruje to, że segue zostanie zwolniony z akcji dodatkowej komórki.Można nawet zobaczyć z przyłączami inspektora komórki:

enter image description here

Usunięcie tego i zastąpienie segue przeciągając od „wyboru” obsłużyć powyżej zamiast kontroli przeciąganie z komórki dał mi właściwą segue .

Nie jestem pewien, co to jest o tej konkretnej komórce, która sprawia, że ​​połączenie sterujące przeciąganiem łączy się z działaniem akcesoriów zamiast akcji wyboru, ale proszę.

+0

dzięki za sugestię, miałem ten sam problem !! :) – Pangu

Powiązane problemy