2015-04-21 18 views
6

Mam tablicę z tekstem, który chciałbym przetestować, więc za każdym razem, gdy kliknę przycisk, będzie wyświetlany tekst jeden po drugim;Jak wyświetlać tekst na UILabel jeden po drugim po każdym kliknięciu przycisku?

jednak mój kod pętli przez całą tablicę z jednej prasy:

- (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]); 
    } 

} 

Jak chciałbym zrobić to tak, że za każdym razem, kiedy mój kliknij przycisk jest wyświetlany tekst jeden po drugim?

Odpowiedz

2

dodać zmienną do utrzymania obecnego stanu do rozszerzenia klasy w widoku kontroler .m pliku, a następnie przyrost zmiennej przy każdym kliknięciu przycisku:

@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

Czy metoda instancetype nie powinna wrócić do siebie? –

+0

@JohnSmith Tak, powinno być :) – dasblinkenlight

+0

Fajnie! Działa doskonale :) Dzięki! –

1

myślę, że można użyć static typ zmiennej i kod jest tutaj

- (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

stwierdzenie jedną zmienną całkowitą w interfejsie. int i = 0;

Czy następujący kod:

-(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

Można to zrobić poprzez stworzenie zmienną składową klasy, która śledzi indeksu za pomocą którego łańcuch był dostępny i drukowane, jak

// 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; 
} 

można również zrobić to samo, tworząc zmienną statyczną wewnątrz obsługi zdarzeń przycisku jako (ale jest to mniej preferowane podejście do tego) -

// 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; 
} 
Powiązane problemy