2016-03-25 8 views
2

Ich schaffe einfaches Menü in meinem Demo zeigen application.Right jetzt, was ich tue, ist, ich habe eine eine MutableArray MutableMenu namensTableview Indizierung confussion

NSArray menu = [@"menu1",@"Menu2","Menu3",@"Menu4"]; 
MutableMenu = [NSMutableArray alloc]initwithArray:menu]; 

ich gerade dieses änderbaren Array bin Anzeige in meinem standardmäßig Tableview Zelle.

In cellForRowAtIndexPath Methode Ich bin mit statischer Indizierung wie unter Code-Schnipsel

if(indexPath.row == 0){ 
     [self performSegueWithIdentifier:SEGUE_TO_MANAGE_TASK sender:nil]; 
    } 
    if(indexPath.row == 1){ 
     [self performSegueWithIdentifier:SEGUE_TO_MANAGE_LEAVE sender:nil]; 
    } 

Alles ist das Arbeiten groß bis now.Now ich ein Array, das ich will, die Erlaubnis überprüfen Sie zuerst in Tableview cell.For Beispiel anzuzeigen Benutzer haben nur 2 Berechtigungen von 4 Menüs. Dieser Benutzer kann nur auf menu1 und menu2 zugreifen. Ebenso unterschiedliche Benutzer unterschiedliche Berechtigungen. Dies ist mein Code, um dieses senario in viewDidLoad .Alle zur Erhaltung adaequat

BOOL permisson = NO; 
NSArray *Roles = [USERDEFAULT objectForKey:PREF_ROLE_ARRAY]; 
for (NSString *temp in Roles) { 
    if ([temp isEqualToString:@"55"] || [temp isEqualToString:@"45"] || [temp isEqualToString:@"67"]) { 
     permisson = YES; 
     if ([Mutablemenu containsObject:@"Team management"]) 
      NSLog(@"Already Have"); 
     else [Mutablemenu insertObject:@"Team management" atIndex:2]; 
     } 
} 
if (!permisson) { 
    [Mutablemenu removeObject:@"Team management"]; 
    [Mutablemenu insertObject:@"" atIndex:2]; 
    [MutableImages removeObject:@"team.png"]; 
} 
[_tableview reloadData]; 

Alles funktioniert gut, aber wenn Benutzer nur 3 permission.My Indizierung in didSelectRowatIndexPath .Für Beispiel erste Benutzer haben die Erlaubnis, 4 dann geändert wird Index ist 0,1,2,3, aber wenn Benutzer 3 Erlaubnis haben, ist der Index 0,1,2.

Aber meine Frage ist, wie ich mit dieser Situation in didSelectRowatIndexPath umgehen. Denn jedes Mal, Indizierung changed.Any Vorschlag ist, ist sehr zu begrüßen

Antwort

0

Wie @RJV Kumar sagte, sollten Sie aktuelle Menü geklickt statt indexPath in didSelectRowatIndexPath wie haben überprüfen:

if([menuArray[indexPath.row] isEqualToString: @"Menu1"]){ 
    [self performSegueWithIdentifier:SEGUE_TO_HANDLE_MENU_1 sender:nil]; 
} 
else if([menuArray[indexPath.row] isEqualToString: @"Menu2"]){ 
    [self performSegueWithIdentifier:SEGUE_TO_HANDLE_MENU_2 sender:nil]; 
} 
. 
. 
so on... 
0

Gemäß meinem Verständnis sind Sie in das Menü zu finden, basierend auf Index, aber Sie sollten wie das nicht tun,

statt daß halten menuId oder menuname, um zu identifizieren, welches Menü der Benutzer ausgewählt hat. Auf diese Weise müssen Sie sich nicht um den Index kümmern.

In didselectRow Methode durch menuId Vergleich oder MenuName, tun Sie Ihre Operation