2009-06-06 39 views
4

Ich habe meine App perfekt funktioniert auf dem Simulator und auf dem iPhone OS 2.2.1 Gerät. Aber ich habe auch ein Gerät mit iPhone OS 3.0 installiert. Und wenn ich auf einen Disclosure-Button tippe, wird die accessoryButtonTappedForRowWithIndexPath-Methode nicht aufgerufen, jedoch wird die Farbe eines Disclaimers dunkler.AccessoryButtonTappedForRowWithIndexPath wird nicht aufgerufen

Hat jemand solch ein Problem konfrontiert?

Wie kann ich dieses Problem lösen? Jetzt

Antwort

1

dass O 3.0 ist offiziell aus der Tür:

Das Problem mit accessoryType Eigenschaft UITableViewCell die ist. Verwenden Sie stattdessen die Methode "tableView: accessoryTypeForRowWithIndexPath: delegate", sofern Sie sowohl auf OS 2.x als auch auf OS 3.x ausgerichtet sind.

0

Leider wurde "AccessoryTypeForRowWithIndexPath" nicht weiter unterstützt.

Der Hinweis auf das unterschiedliche Verhalten (zwischen UITableViewCellAccessoryDisclosureIndicator und UITableViewCellAccessoryDetailDisclosureButton) ist, dass die Offenbarung nicht INDICATOR ‚Spur‘, während die Offenbarung BUTTON bedeutet ‚Spur‘.

Was würden Sie tun müssen, ist Ihre eigene Anerkennung an, wo der Nutzer in der Zelle angezapft und verwenden, die als Teil des zusätzlichen Code dann in Ihre

zu nennen
- (void)tableView:(UITableView*) tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath*) indexPath 

Routine - das ist, was passiert, mit der Offenbarung KNOPF.

Sie möchten etwas wie einen UITapGestureRecognizer verwenden, der an eine AccessoryView in Ihrer benutzerdefinierten Zelle angehängt ist. Diese Sache ist normalerweise NIL, also müssten Sie ein UIView in die Zelle über IB hinzufügen oder programmgesteuert - Größe ändern - und verbinden Sie es mit Ihrem Zellobjekt. Dann würden Sie der Funktion - (id)initWithStyle:(UITableViewCellStyle) style reuseIdentifier:(NSString*) reuseIdentifier Ihrer benutzerdefinierten Zelle Code hinzufügen.

Die allgemeine Idee wird unten gezeigt.

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] 
    initWithTarget:myAccessoryView action:@selector(didTap:)]; 
    tapGesture.delegate = (id <UIGestureRecognizerDelegate>)myTableViewControllerDelegate; 
    [containerView addGestureRecognizer:tapGesture]; 
    [tapGesture release]; 

Die ‚didTap:‘ -Funktion würde Ihr Code dann nach vorne oder einfach nur tun, was Sie in der anderen Routine getan haben könnte.

Es ist traurig, dass die drei verschiedenen Zubehörteile unterschiedlich behandelt werden. Also, wenn du kein riesiges blaues Ding in deiner Zelle haben willst, sieht es so aus, als müsstest du mit etwas zusätzlichen Code kommen, damit die Dinge so funktionieren, wie du es gerne hättest.

Ein Vorteil der Verwendung eines AccessoryView in Ihrer benutzerdefinierten Zelle besteht darin, dass Sie ein UIImageView in die Ansicht einfügen und dann ein Bild im UIImageView ablegen können - was bedeutet, dass Sie jedes Bild gegenüber der einfachen Offenbarung ">" verwenden können.