2012-05-25 4 views
2

Если у меня есть кнопка, и я хочу анимировать по умолчанию «Слайд страницы пользовательского интерфейса» с одним и тем же контроллером, как мне это сделать, когда будет нажата кнопка «nextbutton»? Я думал, что это сработает, но это не так.iOS: нажмите тот же контроллер вида

- (IBAction)NextButton:(id)sender 
{ 
    [self.navigationController pushViewController:self animated:YES]; 
    NSInteger CurrentQuestionNumber = [QuestionNumber intValue]; 
    NSInteger NewQuestionNumber = CurrentQuestionNumber + 1; 
    QuestionNumber = [NSString stringWithFormat:@"%d", NewQuestionNumber]; 
    QuestionNumberLabel.text = QuestionNumber; 
    QuestionLabel.text = [QuestionsList objectForKey:QuestionNumber]; 
} 
+1

Что именно «не работает» об этом? Что происходит вместо того, что вы ожидаете? –

+0

Он просто проходит сквозь слой квазитонов ... между вопросами нет анимации. –

ответ

7

Вместо того, чтобы нажимать «я», вам нужно создать экземпляр нового экземпляра того же класса и нажать его вместо self. Затем вы можете получить соответствующие данные и проанализировать их в интерфейсе в вашем методе -viewDidLoad.

SameClassAsSelf *new_self = [[SameClassAsSelf alloc] init...]; 
new_self.questionNumber = QuestionNumber; 
new_self.questionsList = QuestionsList; //if needed 
[self pushViewController:new_self animated:YES]; 
[new_self release]; 
+0

Неужели это плохая практика? –

+0

Более эффективно создавать новый UIViewController для каждого вопроса, однако я бы рекомендовал просто изменить текст метки на странице, вместо того, чтобы на самом деле нажать новый контроллер представления. –

+0

Полезно знать. Не могли бы вы дать мне дополнительную информацию? Я новичок в объектных c и iOS –

0

Из документации для pushViewController:animated::

ViewController

Контроллер вид, который помещается в стек. Этот объект не может быть экземпляром контроллера панели вкладок, и он не должен уже находиться в стеке навигации.

Вы продолжаете нажимать self на стек навигационной панели. Поскольку он уже находится в стеке, навигационный контроллер, вероятно, игнорирует нажатие, и поскольку вы изменяете метки в представлении, он просто выглядит, как метки меняются без какой-либо анимации. (Потому что это именно то, что происходит.)

+0

Так как я могу это исправить? Просто анимировать ярлыки? –

+0

Нажатие одного экземпляра в стеке навигации не допускается, но вы можете создать столько экземпляров одного и того же viewController, чтобы нажимать на один навигационный стол. Внимательно прочитайте документацию. –