2012-03-27 20 views
1

Ich habe ein interessanten Probleme:Erstes Element von NSArray

Ich habe ein NSArray, die mit einigen Tieren Namen (Strings) bestücken ist. Und ich benutze dieses Array um UITableView. zu bevölkern. Wenn du auf irgendeinen cell (Tier) drückst, bewegst du dich in eine Detailansicht und du liest mehr über dieses Tier. Dann habe ich meine App verbessert und jetzt in UITableView die erste Zelle ist die Zelle, die nur sagt, wie viele Tiere in der UITableView. Es ist wie:

Tiere gefunden: 4 (erste Zelle)

  • Hund (zweite Zelle)
  • Katze (dritte Zelle und etc.)
  • Hamster
  • Snake

Das Problem ist, dass wenn Sie auf die erste Zelle drücken (Animals found: 4), bewegen Sie sich in der Detailansicht eines zufälligen Tieres. Es passiert, weil in dem Array bei index 0 ein Tier ist. Daher bewegen Sie sich in der Detailansicht dieses Tieres. Ich möchte nichts tun, wenn der Benutzer die erste Zelle drückt. Wie kann ich es erreichen?

Antwort

1

Ich denke, die bessere Lösung im Modell darzustellen ist, was Sie in Ihren Ansichten zu sehen. So würde ich es tun, wie folgt:

myModel = [NSMutableArray arrayWithObjects:@"3 animals", @"dog", @"cat", @"chicken", nil]; 
// here, wherever else my model is altered: 
[myModel replaceObjectAtIndex:0 withObject:[NSString stringWithFormat:@"%d animals", myModel.count-1]]; 

nun keine spezielle Logik erforderlich ist, irgendwo anders außer als @ Praveen-K schlägt vor, wenn die Zelle bei indexPath.row Konfiguration = 0 ...

cell.userInteractionEnabled = NO; 
+0

Die beste Lösung, vielen Dank. – SmartTree

+0

Danke @danh. Das können wir auch. –

4

Wenn die angegebene indexPath-Parameterzeile in der Methode didSelectRowAtIndexPath Ihrer Tabellenansicht null ist, kehren Sie einfach zurück. Wenn es größer als Null ist, subtrahiere eins davon, und das wird zum Array-Index des anzuzeigenden Elements. Etwas wie folgt aus:

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tv deselectRowAtIndexPath:[tv indexPathForSelectedRow] animated:YES]; 

    int idx = [indexPath row]; 
    if (idx == 0) 
    { 
     return; 
    } 

    idx--; 
    // use idx as the index into your array of animals as you did initially 
} 
+0

Danke , es funktioniert perfekt. – SmartTree

2

Basierend auf indexPath.row Zustand (in Ihrem Fall sollte es Null)

cell.selectionStyle = UITableViewCellSelectionStyleNone;

aber diese Methode wird die DidSelectRowAtIndexPath noch rufen, so dass Sie die folgenden

cell.userInteractionEnabled = NO zu tun haben;

+0

Danke, funktioniert so, wie ich wollte – SmartTree

+0

Danke @SmartTree. Basierend auf indexPath.row sollten Sie die Benutzerinteraktion deaktivieren, um den Aufruf von didSelectRowAtIndexPath nicht unnötig zu machen (basierend auf Ihrer Bedingung). Sie müssen also nicht einmal Ihren didSelectRowAtIndexPath einchecken. –

+0

Richtig, ich habe es getan. Das Hauptproblem war das erste Element. Ich meine, wenn mein Array 4 Tiere hat, zeigt das TableView nur 3 von ihnen, weil 1 Tier immer noch in der ersten Zelle existiert. Aber die erste Zelle zeigt diese Tiere nicht, weil sie die Anzahl der Tiere in der TableView zeigt. – SmartTree

0

Try this ......

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row ==0) 
     { 
     //Select first Row; 
     } 
    else 
     { 
     //Do What you Want 
     } 
    } 
Verwandte Themen