[英]UIButton closes UIView
我如何解雇超过主要内容的UIView? 可以将其视为带有关闭按钮的巡视弹出窗口。 这是我正在使用的代码,但它不起作用。 没有错误或警告,似乎没有做到这一点。 有任何想法吗?
- (void) showUserSettings {
UIView *settingsPopover = [[UIView alloc] init];
settingsPopover.frame = CGRectMake(20, 600, 280, 350);
[settingsPopover.layer setBackgroundColor:[UIColor colorWithRed:(241/255.0) green:(241/255.0) blue:(241/255.0) alpha:1].CGColor];
[UIView animateWithDuration:0.35 animations:^{
settingsPopover.frame = CGRectMake(20, 130, 280, 350);
settingsPopover.alpha = 1.0f;
} completion:^(BOOL finished) {
}];
UIButton *closeSettings = [[UIButton alloc] initWithFrame:CGRectMake(245, 0, 35, 40)];
[closeSettings setBackgroundColor:[UIColor colorWithRed:(212/255.0) green:(121/255.0) blue:(146/255.0) alpha:1]];
[closeSettings setTitle:@"X" forState:UIControlStateNormal];
[closeSettings addTarget:self action:@selector(closeSettings) forControlEvents:UIControlEventTouchUpInside];
[settingsPopover addSubview:closeSettings];
[self.view addSubview:settingsPopover];
}
- (void) closeSettings {
[UIView animateWithDuration:0.35 animations:^{
_settingsPopover.frame = CGRectMake(20, 400, 280, 350);
_settingsPopover.alpha = 1.0f;
} completion:^(BOOL finished) {
[_settingsPopover removeFromSuperview];
}];
}
您正尝试删除本地创建的视图,但稍后当您尝试从超级视图中删除它时,您没有引用它。
这就是你所做的,你创建并初始化了一个名为settingsPopover
的新UIView
UIView *settingsPopover = [[UIView alloc] init];
...
[self.view addSubview:settingsPopover];
然后你要删除另一个名为_settingsPopover
视图,该视图与showUserSettings
方法中本地创建的视图没有关联。
我假设您已经创建了一个名为_settingsPopover
UIView
类型的全局变量。 如果是这种情况,那么应该在你的-(void)showUserSettings
方法中添加一行并更改另一行来修复它。 看看下面:
-(void)showUserSettings{
...
[settingsPopover addSubview:closeSettings]; <-- in your method the code up to here is fine
// add this line before your addsubview code
_settingsPopover = settingsPopover; //We are copying over your local variable to your global variable
//and change this line from 'settingsPopover' to '_settingsPopover'
[self.view addSubview:_settingsPopover];
这样,您在showUserSettings
方法中本地创建的名为settingsPopover
新创建的类型视图变量将被复制到名为_settingsPopover
变量的全局变量中,这就是您要添加为子视图的变量。
这样你可以在以后想要从你正在使用的[_settingsPopover removeFromSuperview];
删除它[_settingsPopover removeFromSuperview];
时引用它[_settingsPopover removeFromSuperview];
在您的closeUserSettings
方法中。 你所有的其他代码都没问题。
你在这里做的也可以被称为“实现启动画面” 。 启动画面只是一个快速的用户可视化教程,旨在快速查看功能。
这是一个关于在iOS应用程序中实现Splash屏幕的好教程 。
使用自定义启动画面计时器实现
1)创建一个新的视图控制器。 让我们将其命名为从UIViewController
继承的SplashViewController
。 您不需要在接口和实现类中实现任何内容。
2)创建一个新的nib文件。 我们将其命名为SplashView
。 使用Interface Builder打开它并将ImageView添加到视图中。 然后,将要用于启动画面的图像指定给图像视图(检查器 - >属性 - >图像视图 - >图像)。
3)现在,让我们首先在app delegate接口类中添加一些代码,所以它看起来像下面的例子:
@class SplashViewController;
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UINavigationController *navigationController;
SplashViewController *splashViewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet SplashViewController *splashViewController;
@end
您唯一需要做的就是指定启动视图控制器并添加属性。 不要忘记使用@class导入SplashViewController。
4)接下来,在您的实现类中合成splashViewController变量,并通过以下代码扩展该类:
-(void)applicationDidFinishLaunching:(UIApplication *)application {
splashViewController = [[SplashViewController alloc] initWithNibName:@"SplashView" bundle:nil];
[window addSubview:splashViewController.view];
[window makeKeyAndVisible];
[NSTimer scheduledTimerWithTimeInterval:1.5f target:self selector:@selector(onSlashScreenDone) userInfo:nil repeats:NO];
}
初始化splash视图控制器并将其作为子视图添加到主窗口。 使用scheduledTimerWithTimeInterval定义所需的启动画面时间:2.0f(2.0为2秒)。 此外,将以下方法添加到类中:
-(void)onSlashScreenDone{
[splashViewController.view removeFromSuperview];
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}
定时器到期时调用onSlashScreenDone
方法。 它删除了启动视图控制器并将跟进控制器添加为子视图并使其可见(在我们的示例中,是导航控制器)。
我在我的应用程序中使用过它。如果需要更多信息,请告诉我。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.