【问题标题】:changing View from UIWindow class从 UIWindow 类更改视图
【发布时间】:2013-04-24 04:54:56
【问题描述】:

我想知道如何从 UIWindow 类更改视图。例如,我的应用程序有一个倒数计时器视图,当用户启动计时器时,他们可以切换到其他屏幕并且计时器在状态栏,我想要的是当用户点击状态栏(我在状态栏顶部有一个自定义按钮)时,它会触发此方法并将视图从当前视图更改为计时器视图...

- (void)statusbarButtonTouched
{

    NSLog(@"Button TOuched");

    [self addSubview:??]

}

【问题讨论】:

  • 你的意思是你想在窗口上添加一个视图,这样你就可以把它放在整个应用程序的前面,对吧?
  • 是的...我需要当前视图(无论它是什么)删除并将 timerView 放在顶部。
  • 我认为您不需要删除当前视图,只需将视图添加到窗口中,然后再显示并删除即可。
  • 你能分享一个示例代码吗?

标签: iphone ios objective-c uiviewcontroller uiwindow


【解决方案1】:

使用定义的属性在 App 委托中创建 timerView

AppDelegate.h

@property (nonatomic, retain) UIView *timerView;

AppDelegate.m

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[FLViewController alloc] initWithNibName:@"FLViewController" bundle:nil] autorelease];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];


    self.timerView = [[UIView alloc] initWithFrame:self.window.frame];
    [self.timerView setBackgroundColor:[UIColor greenColor]];
    [self.window addSubview:self.timerView];
    [self.timerView setHidden:YES];


    return YES;
}

将此视图放在前面的代码:

- (IBAction)shouTimerViewTouched:(id)sender {
    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    [delegate.timerView setHidden:NO];
    [delegate.window bringSubviewToFront:delegate.timerView];
}

就是这样。你可以从这里https://github.com/rptwsthi/TrickTest 拉来运行演示。

干杯。

【讨论】:

    【解决方案2】:

    根据文档

    - (void)removeFromSuperview
    

    取消接收者与其父视图和窗口的链接,并将其移除 来自响应者链。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多