2013-11-15 2 views
-3

Я знал, что этот вопрос задан много раз, но я не нашел решения для своей проблемы. Я объявил счетчик 0 на ViewDidLoad,следующее и предыдущее действие

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    counter = 0; 
    [stgImage1 setImage:[UIImage imageNamed:[imageStr objectAtIndex:counter]]]; 
} 

Это моя следующая и предыдущая акция,

-(void)btnClicked:(UIButton*)btn{ 
    if (btn.tag==1) { 
    if (counter < [textStr count]-1) { 
     counter++; 
     NSLog(@"%i", counter); 
     [stgImage1 setImage:[UIImage imageNamed:[imageStr objectAtIndex:counter]]]; 
    } 
    if(counter > [textStr count]) { 
     counter = 0; //to loop continuously 
    } 

    } 
    else{ 
    if (counter>0) { 
     counter--; 
     NSLog(@"%i", counter); 
     [stgImage1 setImage:[UIImage imageNamed:[imageStr objectAtIndex:counter]]]; 
    } 
    } 

Проблема: Эта часть не работает в моем случае, т.е., не существует непрерывного цикла не произошло здесь

if(counter > [textStr count]) { 
     counter = 0; //to loop continuously 
} 

Пожалуйста, помогите!

+0

использование while цикл, а не если цикл. – Smita

+0

где ваша петля u пишут только условие pls делают это как while или еще что-то еще вторая ошибка ошибки counterA не равна счетчику – Spynet

+0

вы используете неправильную логику. вы проверяете if (counter> [textStr count]), и если условие истинно, вы снова устанавливаете счетчик = 0. Второе временное условие является ложным, а цикл не выполняется непрерывно. – Smita

ответ

0

Проблема в том, что вы пропускаете от < [textStr count]-1 до > [textStr count] и не оцениваете равным. Вы также увеличиваете счетчик в первом цикле for, чтобы он никогда не увеличивался для вашего второго оператора if.

-(void)btnClicked:(UIButton*)btn{ 
    if (btn.tag==1) { 

    NSLog(@"next clicked"); 
    NSLog(@"image array count: %i", [imageStr count]); 
    counter++; 
    if (counter == [textStr count]) counter = 0; 
    NSLog(@"counter: %i", counter); 
    [stgImage1 setImage:[UIImage imageNamed:[imageStr objectAtIndex:counter]]]; 

    } 
    else{ 

    NSLog(@"previous clicked"); 
    if (counter>0) { 
     counter--; 
     NSLog(@"%i", counter); 
     [stgImage1 setImage:[UIImage imageNamed:[imageStr objectAtIndex:counter]]]; 
    } 
    } 
} 
+0

if (counter == [textStr count]) не работает, я также попробовал if (counter == [textStr count] -1), который заменил последнее изображение – Sharma

+0

Я отредактировал и упростил логику для вас. – Joel

+0

Я пробовал, но не работал – Sharma

0

30 сентября я дал вам ответ (для тех, кто может видеть удаленные сообщения: https://stackoverflow.com/questions/19087078/i-want-correct-format-of-this-code) как сутью: https://gist.github.com/vikingosegundo/6814617

Вы должны гарантировать, что оба массива имеют одинаковый размер и индексы действительны в любое время. кроме того, вы можете значительно сократить код, если вы используете какой-то умный код C как тройной оператор и оператор modulo.

-(void)btnClicked:(UIButton*)button 
{ 
    NSAssert([imageStr count] == [txtStr count], @"both arrays need to have the same number of items"); 
    idx += (button == self.nextButton) ? 1 : -1; // if nextButton increment, else decrement 
    idx = idx % [textStr count]; // modolo, will keep idx between 0 and count-1 

    [stgImage1 setImage:[UIImage imageNamed: imageStr[idx]]]; 
    stgText1.text= [NSString stringWithFormat:@"%@", textStr[idx]]]; 
} 
Смежные вопросы