2012-03-28 9 views
0

Ich verwende TabStrip für ein Projekt von mir. Der Tabstrip hat TTTabItems, die das Alphabet A-Z sind. Wenn ich auf jeden Buchstaben des Alphabets klicke, navigiert der Delegierte zu einer anderen Seite.Three20 TabStrip

In der anderen Seite gibt es auch einen TTTabstrip (gleiche Konstruktion, Rahmen usw.). Wie kann ich das Alphabet auch auf der zweiten Registerkarte markieren, ohne das Ereignis auszulösen?

Ich habe versucht, den ganzzahligen Wert des Briefes den ganzzahligen Wert von „a“ mod zu bekommen (so dass es einen Index bringt mir wird) und weisen es selectedIndex:

unichar letter = [[NSString stringWithString:@"e"] characterAtIndex:0]; 
/*(k is @"a" unichar)*/ 
tabBar.selectedTabIndex = letter % kEnglishAlpha; 

Aber es gibt mir Deallokation Error.

** UPDATE **

auf der Drill-Down-Detailansicht (wo ich habe das Problem) ich in den Kommentaren erwähnt habe ich die folgenden von einer tt Navigation kommen:

tt://listWords/Cat 

auf die view did load event, und nach der Initialisierung des TTTabStrip (der nur TTTabItem mit den Buchstaben AZ enthält) und der tabBar.delegate = self-Deklaration verwende ich den oberen Code, um den gewählten Buchstaben auszuwählen. Der Rest der Ansicht zeigt die Definition und alles, was damit zusammenhängt. Normalerweise würde das der Fall sein, aber wenn ich die Zurück-Taste benutze, um zu der Ansicht zurückzukehren, die die tttableItems (cat, catsup, catnip usw.) hat, sagt sie den zugewiesenen Controller.

Meine Vermutung ist, dass die Verwendung des Tabselected-Delegations-Code und das Setzen eines Tabindex, den Tab ausgewählten Code sofort auslöst und das ist, wo das Problem liegt. Wenn ich den selectedTabIndex-Code nicht verwende, kann ich ohne Probleme durch die Buchstaben navigieren.

Antwort

0

Es gibt keine Funktion zur automatischen Auswahl eines TTTabItem in TTStripTab.

Sie haben TTTabStrip zu erweitern und fügen Sie diese Funktion:

/////////////////////////////////////////////////////////////////////////////////////////////////// 
- (void)setSelectedTabIndexToCenter:(NSInteger)selectedTabIndex { 
    if (selectedTabIndex>_tabItems.count-1) { 
    selectedTabIndex = _tabViews.count-1; 
    } 

    [self layoutSubviews]; 
    float horizontalOffset = 0.0f - _scrollView.size.width/2; 
    for (int i = 0; i < selectedTabIndex; ++i) { 
    TTTab* tab = [_tabViews objectAtIndex:i]; 
     if (selectedTabIndex-1==i) { 
     horizontalOffset += tab.size.width*1.5; 

     } else { 
      horizontalOffset += tab.size.width; 
     } 
    } 
    if (horizontalOffset<0) { 
     horizontalOffset = 0; 
    } 

    _scrollView.contentOffset = CGPointMake(horizontalOffset, 0); 
    [super setSelectedTabIndex:selectedTabIndex]; 
} 

Diese Funktion wird durch Ändern der Offset des Streifens Registerkarte ein bestimmtes Register Element und in der Mitte auf sie wählen werden.

+0

Danke für diesen, aber wird der selectedTabIndex das tabselected Ereignis auslösen? Weil das mein Problem ist, wird es ausgelöst und irgendwie hebt es den gesamten Controller auf. Meine App ist ein Drilldown mit Tabstrip. Ich habe den ersten Viewcontroller (Suche & Tab) jemand drückt das Element, dann das Element auf dem zweiten Viewcontroller präsentiert die Daten und ein dritter Viewcontroller präsentiert die Details. Auf dem zweiten Viewcontroller habe ich zwar den Buchstaben ausgewählt, aber auf dem dritten, wenn ich den Buchstaben wähle (programmatisch, um ihn zum Beispiel auf dem Buchstaben C zu zeigen), tut er das Dealloc. – Panagiotis

+0

Entschuldigung, ich dachte du meinst etwas anderes. Kannst du den Code des Controllers posten? – aporat