2015-04-21 9 views
6

Ich habe ein Array mit Text, mit dem ich durchgehen möchte, so dass jedes Mal, wenn ich auf meine Schaltfläche klicke, der Text nacheinander angezeigt wird;Wie zeige ich nach jedem Klick auf meine Schaltfläche Text auf UILabel einzeln an?

jedoch Schleifen mein Code durch das gesamte Array mit einer Presse:

- (IBAction)nextButtonOneClicked:(id)sender { 

    NSArray *titles = @[@"Label One", @"Label Two", @"Label Three", 
          @"Label Four", @"Label 5", @"Label 6"]; 

    for (int i=0; i<[titles count]; i++) { 
     NSLog(@"%@", titles[i]); 
    } 

} 

Wie würde ich es so machen, dass jedes Mal, wenn ich meine Schaltfläche klicken ist zeigt den Text one-by-one?

Antwort

2

eine Variable Fügen Sie den aktuellen Zustand in den Klassenerweiterung in Ihrer View-Controller .m-Datei zu halten, erhöhen Sie dann die Variable jedes Mal auf die Schaltfläche geklickt wird:

@interface MyViewController() { 
    int _currentTitle; 
    NSArray *_titles; 
} 
@end 

-(instancetype)initWithCoder:(NSCoder *)decoder { 
    if (self = [super initWithCoder:decoder]) { 
     _currentTitle = 0; 
     _titles = @[@"Label One", @"Label Two", @"Label Three", 
          @"Label Four", @"Label 5", @"Label 6"]; 
    } 
    return self; 
} 

- (IBAction)nextButtonOneClicked:(id)sender { 
    NSString *str = _titles[_currentTitle++]; 
    NSLog(@"%@", str); 
    myLabel.text = str; 
    if (_currentTitle == _titles.count) { 
     _currentTitle = 0; 
    } 
} 
+0

Sollte die Instanztyp-Methode nicht selbst zurückgeben? –

+0

@JohnSmith Ja, sollte es :) – dasblinkenlight

+0

Cool! Arbeitete perfekt :) Danke! –

1

Ich glaube, Sie static Variablentyp verwenden können, und Code ist hier

- (IBAction)buttonPressed:(id)sender { 
    static int Index = 0; 
    NSArray *titles = @[@"Label One", @"Label Two", @"Label Three", 
        @"Label Four", @"Label 5", @"Label 6"]; 
    NSLog(@"%@", titles[Index]); 
    Index++; 
    if(Index >= titles.count) { 
     Index = 0; 
} 
} 
2
@interface myViewController() 
{ 
    int i; 
    NSArray *titles; 
} 


- (void)viewDidLoad { 
    [super viewDidLoad]; 
    i=0; 
    titles = @[@"Label One", @"Label Two", @"Label Three", 
           @"Label Four", @"Label 5", @"Label 6"]; 
} 


- (IBAction)nextButtonOneClicked:(id)sender { 

    if(i<[titles count]) 
     NSLog(@"%@", titles[i]); 
     i++ 
    }else{ 
    i=0; 
    } 
} 
1

eine integer-Variable im Interface deklarieren. int i = 0;

Sie den folgenden Code:

-(IBAction)nextButtonClicked:(id)sender 
{ 


NSArray *[email protected][@"Label 1",@"Label 2",@"Label 3",@"Label 4",@"Label 5",@" Label 6"]; 

    label.text=[array objectAtIndex:i]; 

    NSLog(@"label %@",[array objectAtIndex: i]); 

    i=i+1; 

} 
1

Sie können dies tun, indem Sie eine Membervariable in der Klasse zu schaffen, die Spur des Index hält mit dem die Zeichenfolge abgerufen und gedruckt wurde, als

// declare counter 
int titleIndexCounter; 

// initialize it 
titleIndexCounter = 0; 

// manipulate it in button's event handler as 
- (IBAction)nextButtonOneClicked:(id)sender 
{ 
    NSArray *titles = @[@"Label One", @"Label Two", @"Label Three", 
          @"Label Four", @"Label 5", @"Label 6"]; 
    NSLog(@"%@", [titles objectAtIndex:titleIndexCounter]); 
    titleIndexCounter++; 
    if (titleIndexCounter == titles.count) 
     titleIndexCounter = 0; 
} 

Sie können auch dasselbe tun, indem Sie eine statische Variable im Ereignishandler der Schaltfläche erstellen (aber es ist ein weniger bevorzugter Ansatz, dies zu tun) -

// manipulate it in button's event handler as 
- (IBAction)nextButtonOneClicked:(id)sender 
{ 
    static int titleIndexCounter = 0; 

    NSArray *titles = @[@"Label One", @"Label Two", @"Label Three", 
          @"Label Four", @"Label 5", @"Label 6"]; 
    NSLog(@"%@", [titles objectAtIndex:titleIndexCounter]); 
    titleIndexCounter++; 
    if (titleIndexCounter == titles.count) 
     titleIndexCounter = 0; 
} 
Verwandte Themen