【问题标题】:iOS: Push same view controlleriOS:推送相同的视图控制器
【发布时间】:2012-06-01 12:14:37
【问题描述】:

如果我有一个按钮,并且我想用同一个控制器为默认的“UI Page Slide”设置动画,那么当单击“nextbutton”时,我该如何实现呢?我认为这会起作用,但它没有。

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

【问题讨论】:

  • 究竟是什么“不起作用”?会发生什么而不是你所期望的?
  • 它只是在问题列表中循环...问题之间没有动画。

标签: iphone ios xcode uiview


【解决方案1】:

你需要实例化同一个类的一个新实例,而不是推送 self,然后推送它来代替 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];

【讨论】:

  • 为每个问题创建一个新的 UIViewController 效率更高,但是,我建议只更改页面上标签的文本,而不是实际推送新的视图控制器。
  • 很高兴知道。你能给我更多的信息吗?我是 Objective-c 和 iOS 的新手
【解决方案2】:

来自pushViewController:animated: 的文档:

视图控制器

被压入堆栈的视图控制器。这 对象不能是标签栏控制器的实例,也不能是 已经在导航堆栈上。

您不断将self 推送到导航堆栈。由于它已经在堆栈上,导航控制器可能会忽略推送,并且因为您正在修改视图中的标签,所以看起来标签正在更改而没有任何动画。 (因为这正是正在发生的事情。)

【讨论】:

  • 那么我该如何补救呢?只是为标签设置动画?
  • 不允许在导航堆栈上推送相同的实例,但您可以创建相同 viewController 的多个实例来推送单个导航堆栈。仔细阅读文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多