这可能听起来很复杂,但我可以回答任何问题。我想以一种非常复杂的方式做的是我有两个视图,我试图在我的欢迎屏幕主页上加载。我想要加载的第一个是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
答案 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