0

团队,

我试图在运行时在所有可见视图的顶部添加一个菜单。这个菜单应该在某些条件下可以很容易地动态添加和删除。

为此,我尝试在运行时将按钮视图添加到 UIWindow 作为子视图。

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:nil forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Show View" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[window addSubview:button];
[window makeKeyAndVisible];
[window bringSubviewToFront:button];

但它没有用。我也尝试将此按钮放在根视图控制器中,但再次没有运气。

编辑 - 注意:此代码不是来自UIViewController. 我正在尝试构建一个库,它将在该库代码中。用例就像您可以发布 NSNotification 以在运行时动态启用和禁用此菜单。

请建议。

谢谢 !

4

4 回答 4

0

一种更简单的方法是将菜单视图添加到控制器的视图中。您将获得一些好处:

  1. 它将正确处理旋转
  2. 你不要乱开窗户

查看您的代码,我应该假设您在视图控制器中使用它,因此您不需要调用 [window makeKeyAndVisible]。此外,您没有显示您正在谈论的窗口。你在创造它吗?你在使用你的根视图控制器之一吗?

于 2013-06-29T07:37:46.330 回答
0

你想显示一些漂浮在所有用户视图上的东西。你想在一个通用的库中实现它。

这听起来很像UIAlertView. 为什么不以相同的方式实现它UIAlertView?创建一个新的UIWindow并将其设置windowLevelUIWindowLevelAlert. 将您的“浮动”内容放入您自己的UIWindow.

UIWindow您可以在此问答中找到一些有用的技巧来创建第二个。

于 2013-06-29T08:51:03.803 回答
0

在 appdelgate.h

-(void)addMarketOpenCloseIcon;

在 appdelgate.m

#pragma mark Add Market Open Close Label

-(void)addMarketOpenCloseIcon

    if (lblMarketOpenClose==nil) {
        lblMarketOpenClose=[[UILabel alloc ] initWithFrame:CGRectMake(116,20, 80, 21)];
        lblMarketOpenClose.textColor=[UIColor redColor];
        [lblMarketOpenClose setBackgroundColor:[UIColor clearColor]];
        lblMarketOpenClose.font=[UIFont fontWithName:@"Arial" size:12];
        [self.window addSubview:lblMarketOpenClose];
    }
} 

#pragma mark DidFinishLauch
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    //create all table
    LoginViewController *login=[[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:nil];
        navigationController        = [[ UINavigationController alloc] initWithRootViewController:login];

    [self.window setRootViewController:navigationController];

    self.navigationController.navigationBarHidden=YES;

    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    return YES;
}

在 LoginViewController.m

- (void)viewDidLoad
{
   [super viewDidLoad];

   appdelgate=[[UIApplication sharedApplication]delegate];
   [appdelgate addMarketOpenCloseIcon];
}
于 2013-06-29T07:51:38.357 回答
-1

创建 UIWindow 对象,在其上添加按钮,然后将 UIWindow 对象添加到 [UIApplication sharedApplication].keyWindow

UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;   
UIWindow *buttonWindow = [UIWindow alloc] initWithFrame: self.view.bounds]  

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];                            
[button addTarget:self action:nil forControlEvents:UIControlEventTouchDown];   
[button setTitle:@"Show View" forState:UIControlStateNormal];   
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);   

[buttonWindow addSubview: button];
[keyWindow addSubview: buttonWindow]

[buttonWindow makeKeyAndVisible]  

[backgroundWindow bringSubviewToFront:button];
于 2013-06-29T10:20:01.160 回答