用按钮切换uiviews而不是uinavigation控制器

时间:2009-06-06 04:49:07

标签: iphone cocoa-touch uiview

我看过How to switch views by buttons on 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部分,那么视图就会消失在我的按钮后面,但按钮仍然存在。我不确定这是否是在按钮之间切换的正确方法,但如果有人知道如何做到这一点,请帮助。此外,如果有人知道任何使用按钮在视图之间切换的示例项目,请告诉我。

万分感谢!

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

我通常使用的技术涉及创建一个superview类,其底部包含一个工具栏,内容视图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
}