在运行时期间动态地在所有视图之上添加UIView?

时间:2013-06-29 07:23:06

标签: iphone ios objective-c ipad

团队,

我试图在运行时在所有可见视图的顶部显示一个菜单。在某些条件下,此菜单应易于添加和动态删除。

为此,我尝试在运行时将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 个答案:

答案 0 :(得分:0)

更简单的方法是将菜单视图添加到控制器的视图中。你会有一些好处:

  1. 它将正确处理旋转
  2. 你不要乱用窗口
  3. 看看你的代码,我认为你在视图控制器中使用它,因此你不需要调用[window makeKeyAndVisible]。此外,您没有显示您正在谈论的窗口。你在创造吗?你使用的是根视图控制器吗?

答案 1 :(得分: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];
}

答案 2 :(得分:0)

您希望显示浮动在所有用户视图上的内容。您希望在库中实现此功能以便一般使用。

这听起来很像UIAlertView。为什么不像UIAlertView那样实现它?创建一个新的UIWindow并将其windowLevel设置为UIWindowLevelAlert。将您的“浮动”内容放在您自己的UIWindow

您可以在this Q&A中找到一些有用的提示,以便创建第二个UIWindow

答案 3 :(得分:-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];