我正在创建一个iOS库。从AppDelegate启动时,我的库将在屏幕顶部创建一个按钮。
我创建了按钮,它正在显示。但是当我点击时,不会引发目标方法。
这就是我创建按钮并在库中分配其动作的方法
- (void) addLoginButton {
UIWindow *appWindow = [[[UIApplication sharedApplication] delegate] window];
UIButton *loginButton = [UIButton buttonWithType:UIButtonTypeSystem];
[loginButton setFrame:CGRectMake((appWindow.frame.size.width/2)-35, 20, 70, 20)];
[loginButton setBackgroundColor:[UIColor blueColor]];
[loginButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[loginButton setTitle:@"Login" forState:UIControlStateNormal];
[loginButton addTarget:self action:@selector(auLoginClicked) forControlEvents:UIControlEventTouchUpInside];
[appWindow addSubview:loginButton];
if([appWindow.rootViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController *navCon = (UINavigationController *)(appWindow.rootViewController);
if (!navCon.navigationBar.isHidden) {
navCon.navigationBar.layer.zPosition = 0;
}
}
loginButton.layer.zPosition = 5;
}
- (void) auLoginClicked {
NSLog(@"Hello");
}
答案 0 :(得分:2)
我复制了你的代码并得到了相同的结果。这真的很奇怪,我还在努力。我确认这是导致结果的故事板,因为我在我的项目中使用你的代码而不使用故事板,它运作正常。
但请不要使用loginButton.layer.zPosition = 5;
这不是正确的方式。
以下是一些建议:
但是如果你使用UINavigationController使用:
[self.navigationController.view.window addSubview:aView];
如果您使用UITabBarController使用:
[self.tabBarController.view.window addSubview:aView];
在AppDelegate中,您可以直接将视图分配给窗口。在appDelegate didFinishLaunchingWithOptions
方法中使用:
[self.window addSubview:aView];
希望它有所帮助...
答案 1 :(得分:0)
不是将按钮添加为窗口的子视图,而是添加此项 然后你的按钮就会动作。 [appWindow.rootViewController.view addSubview:loginButton];
如果您将视图(按钮)添加为窗口的子视图,则它将无法从用户获取事件。这就是您的按钮无法响应事件的原因。 调试它你会明白:)
如果你想让它在每个viewController的顶部,那么检查UINavigationController是不是initialViewController,然后创建一个你自己的NavigationController并使其成为initialContoller。它将使您的按钮在整个应用程序中可见(直到用户自己呈现任何其他VC)
答案 2 :(得分:0)
UIWindow *appWindow = [UIApplication sharedApplication].keyWindow;
[appWindow addSubview:view];
您只需要获取应用程序的keyWindow
并将按钮添加为子视图。您不必设置zPosition