3

我看过如何通过 iPhone 上的按钮切换视图?但这并没有回答如何使用按钮在视图之间来回切换。提出问题的人确定了他们可以使用 uinavigationcontroller 在视图之间切换的答案。

我将以下代码放在一个 ibaction 中,当在主视图中按下一个按钮时,它就会启动。

         PhoneNumberViewController *phoneNumberViewController1 = [[PhoneNumberViewController alloc] initWithNibName:@"PhoneNumberView2" bundle:nil];
self.phoneNumberViewController = phoneNumberViewController1;
[self.view removeFromSuperview];
[self.view insertSubview: phoneNumberViewController1.view atIndex:0];

当此代码执行时,整个视图将变为空白。如果我省略了 removefromsuperview 部分,那么视图会消失在我的按钮后面,但按钮仍然存在。我不确定这是否是在按钮之间切换的正确方法,但如果有人知道如何做到这一点,请提供帮助。另外,如果有人知道任何使用按钮在视图之间切换的示例项目,请告诉我。

太感谢了!

4

2 回答 2

2

您从它的超级视图中删除了视图控制器的视图,然后向它添加了一个子视图。视图层次结构在视图控制器的超级视图(可能是您的窗口)处被破坏。这就是为什么你会得到一个空白屏幕。

您可能希望保留对原始视图的引用,然后通过将视图控制器的视图设置为新视图将其交换到新视图。

// origView is an instance variable/IBOutlet to your original view.
- (IBAction)switchToPhoneView:(id)sender {
  if (origView == nil)
    origView = self.view;
  self.view = phoneViewController.view;
}

- (IBAction)switchToOriginalView:(id)sender {
  self.view = origView;
}
于 2009-06-06T05:17:07.040 回答
1

我通常使用的技术包括创建一个包含底部工具栏的超级视图类,以及一个填充屏幕其余部分的内容视图 UIView 类。

然后,我将子视图添加到内容视图以根据按钮单击更改视图。这种方法使得相同的工具栏在所有视图中都是恒定的。我首先定义一个这样的辅助函数:

-(void) clearContentView {
    //helper to clear content view
    for (UIView *view in [self.contentView subviews]){
        [view removeFromSuperview];
    }
}

我的 IBAction 然后看起来像这样:

-(IBAction) buttonClicked{
    self.title = @"Images"; //change title of view
    [self clearContentView]; //clear content view
    [self.contentView addSubview:self.imagesViewController.view]; //add new view
    [self.imagesViewController viewWillAppear:YES]; //make sure new view is updated
    [self enableButtons];  //enable all other buttons on toolbar
    self.imagesButton.enabled = NO;  //disable currently selected button
}
于 2009-06-09T04:49:32.650 回答