删除视图以防止多个实例

时间:2012-02-05 21:08:54

标签: objective-c xcode

这可能听起来很复杂,但我可以回答任何问题。我想以一种非常复杂的方式做的是我有两个视图,我试图在我的欢迎屏幕主页上加载。我想要加载的第一个是PageOne的视图“text1Title”,因此在awakeFromNib上调用Page One方法。现在,当我点击下一个按钮时,我告诉它隐藏下一个按钮并再次运行第一个方法,这样它将使if语句有效并删除text1View并加载第二页。问题是,当我再次加载PageOne视图时,它会创建视图的两个实例,而removeFromSuperview只会删除一个。我怎样才能使这更加简化并让这项工作?谢谢。

@implementation WelcomeScreenMain


    NSString *const text1Title      = @"WelcomeScreenText1";
    NSString *const text1Title2     = @"WelcomeScreenText2";


    - (void)awakeFromNib
    {   
        [self PageOne];
    }

    - (void) PageOne
    {
        //Page One

        WelcomeScreenText1* text1View =
        [[WelcomeScreenText1 alloc] initWithNibName:text1Title bundle:nil];
        // embed the current view
        [myTargetView addSubview: [text1View view]];
        // make sure we automatically resize the controller's view to the current window size
        [[text1View view] setFrame: [myTargetView bounds]]; 

        if (myButton.isHidden) {
            [[text1View view] removeFromSuperview];
            [self PageTwo];
        }


    }

    - (void) PageTwo
    {
        //Page Two

        WelcomeScreenText2* text2View =
        [[WelcomeScreenText2 alloc] initWithNibName:text1Title2 bundle:nil];
        // embed the current view to our host view
        [myTargetView addSubview: [text2View view]];
        // make sure we automatically resize the controller's view to the current window size
        [[text2View view] setFrame: [myTargetView bounds]];
    }

    -(IBAction)nextButton:(id)sender
    {

        myButton.hidden = YES;
        [self PageOne];

    }

    @end

1 个答案:

答案 0 :(得分:1)

您可以在尝试再次添加之前删除PageOne视图的所有实例。

-(void)awakeFromNib
{ 
   NSArray *subv = [NSArray arrayWithArray:myTargetView.subviews];
   for(NSView *view in subv)
   {
      if([view isKindOfClass:[WelcomeScreenText1 class]])
      {
         [view removeFromSuperview];
      }
   }
   [self PageOne];
}

您也可以在PageOne的开头添加该代码段。由你决定。

请注意,子视图数组已被复制,因为您无法枚举可能会发生变异的内容。

不相关的样式问题是,通常obj-c方法从小写开始,因此pageOne而不是PageOne