【问题标题】:switch between uiviews with buttons and not uinavigation controllers在带有按钮而不是 uinavigation 控制器的 uiviews 之间切换
【发布时间】:2013-12-06 10:41:21
【问题描述】:

我看过How to switch views by buttons on iPhone? 的帖子,但这并没有回答如何使用按钮在视图之间来回切换。提出问题的人确定了他们可以使用 uinavigationcontroller 在视图之间切换的答案。

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

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

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

谢谢一百万!

【问题讨论】:

    标签: iphone cocoa-touch uiview


    【解决方案1】:

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

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

    // 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;
    }
    

    【讨论】:

    【解决方案2】:

    我通常使用的技术包括创建一个超级视图类,该类在底部包含一个工具栏,以及一个填充屏幕其余部分的内容视图 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 2012-12-27
      • 2023-04-06
      • 2012-07-26
      • 2012-05-09
      相关资源
      最近更新 更多