2013-03-20 15 views
5

Mam niestandardowy widok akcesoriów (UIButton) w mojej prototypowej komórce w serii ujęć. Po kliknięciu tego przycisku nie jest wywoływana metoda delegata dla naciśniętego przycisku akcesorium. Jeśli używam standardowego przycisku ujawniania, nazywa się to dobrze. Zakładam, że gdzieś brakuje mi haka. Ktoś wie gdzie?Niestandardowy widok akcesoriów na komórce prototypowej UITableView nie jest wypalany

+0

Używam podklasy UITableViewCell i projektowanie komórki w programie budującym interfejs. Nie robię tego z kontrolera widoku tabeli. Muszę zawołać z tej podklasy. – smokingoyster

Odpowiedz

1

Skończyłem pracować nad tym przy użyciu protokołu dla niestandardowych komórek tabeli.

CustomAccessoryTableCellDelegate.h

@protocol CustomAccessoryTableCellDelegate <NSObject> 

    @required 
    - (void) accessoryButtonTappedForCell: (UITableViewCell *) cell; 

@end 

CustomAccessoryViewTableCell.h

@interface CustomAccessoryViewTableCell : UITableViewCell 

     /** The custom accessory delegate. */ 
     @property (nonatomic, weak) id<CustomAccessoryTableCellDelegate> delegate; 

@end 

CustomAccessoryViewTableCell.m

- (IBAction) buttonAction:(id)sender{ 

    if ([self.delegate respondsToSelector:@selector(accessoryButtonTappedForCell:)]) { 
     [self.delegate accessoryButtonTappedForCell:self]; 
    } 

} 

Wewnątrz Table View Controller

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    CustomAccessoryViewTableCell *cell = [tableView 
         dequeueReusableCellWithIdentifier:@"MyCustomCell"]; 

    cell.label.text = @"Some Name"; 
    cell.delegate = self; 

    return cell; 
} 

#pragma mark - Custom Accessory View Delegate 

- (void) accessoryButtonTappedForCell:(UITableViewCell *)cell{ 
    [self tableView:self.writerTable 
     accessoryButtonTappedForRowWithIndexPath: [self.writerTable 
                 indexPathForCell:cell]]; 
} 
2

Guess 1: Tak naprawdę nie mają „zwyczaj akcesoriów widok” masz UIButton który jest umieszczony gdzie akcesorium pójdzie. To nie wystrzeliłby przycisku dodatkowego kliknięcia akcesorium, ponieważ nie jest to naprawdę akcesorium.

Guess 2: Macie prawdziwe widok akcesoriów, ale to nigdy nie otrzymuję „kran” wydarzenie, ponieważ masz UIButton w nim, który jest jedzenie interakcji użytkownika, ale nie wypalania działanie. W takim przypadku spróbuj zamiast tego dodać prosty UIView.

Poza tym potrzebowałbym więcej informacji.

+0

Próbowałem zamiast tego użyć widoku obrazu, który nie zrobił żadnej różnicy. Przycisk jest podłączony do właściwości accessoryView urządzenia UITableViewCell. Czy nie ma sposobu, aby programowo wywołać to z podklasy UITableViewCell? – smokingoyster

+0

W swojej 'cellForRowAtIndexPath', po uzyskaniu komórki, sprawdź, czy twoja własność' accessoryView' ma odniesienie do twojego widoku lub czy jest 'nil'. Jeśli jest poprawnie skonfigurowany w IB, powinien istnieć. – DBD

+0

Pokazuję przycisk/widok/cokolwiek tam mam. Wygląda na to, że obsługuje tylko zdarzenie dotknięcia na swoim zdefiniowanym typie widoku akcesoriów. I nie wydaje się być dobrym sposobem, aby zrobić to programowo z komórki tabeli. Skończyło się na zastosowaniu niestandardowego protokołu, na który odpowiem. – smokingoyster

2

docs Apple dla akcesoriów metody delegata mówi

Delegat zazwyczaj reaguje z kranu przycisku ujawnienia (akcesorium widzenia) przez wyświetlenie nowego widoku związane z wybranym wierszu. Ta metoda nie jest wywoływana, gdy ustawiony jest widok akcesoriów dla wiersza w indexPath.

, więc nie jest wymagany widok niestandardowych akcesoriów. to standardowe zachowanie.

Powiązane problemy