2017-03-27 60 views
1

我創造的是iOS庫不工作。從AppDelegate啓動時,我的庫將在屏幕頂部創建一個按鈕。UIButton的點擊,如果子視圖的UIWindow

我創建了按鈕,它被顯示出來。但是當我點擊時,目標方法不會被激發。

這是怎麼了我創建的按鈕,然後在庫

- (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

我認爲你必須採取隨後的UIView在窗口上添加一層。 uiview應該添加按鈕。試試這個 – ajjjjjjjj

+0

不要使用圖層'loginButton.layer.zPosition = 5;' –

+1

使用bringSubViewFront,如果不是。 –

回答

2

我複製你的代碼分配它的作用,並且具有相同result.It真的很奇怪,我還在研究它。我確認是導致結果的故事板,因爲我在我的項目中使用你的代碼,它不使用故事板,它工作正常。

但是,請不要使用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]; 

希望它可以幫助...

+0

我正在開發一個庫,並且在AppDelegate中唯一的調用是啓動庫。使用我的庫的開發人員將從AppDelegate初始化它,我必須添加按鈕,無論它是什麼類型的控制器。 –

+0

也許你可以給你的用戶一個API,像這樣showButtonInView:(UIView)視圖,並讓你的用戶選擇哪個容器來顯示按鈕 –

+0

我需要在所有視圖控制器頂部的按鈕。 –

0

取而代之的將您的按鈕作爲窗口的子視圖添加此 那麼你的按鈕將得到行動。 [appWindow.rootViewController.view addSubview:loginButton];

如果添加視圖(按鈕)作爲窗口的子視圖,那麼它將無法得到user.That事件就是爲什麼你的按鈕不響應事件的原因。 調試它,你將體會到:)

如果你想,要成爲每個的viewController的頂部,然後檢查的UINavigationController不是initialViewController然後創建一個自己的NavigationController並使其作爲initialContoller。它會使你的按鈕將整個應用程序可見(直到被自己的用戶提出任何其他VC)

+0

這類作品..但我需要按鈕在所有的意見。如果我添加一個模態視圖控制器,那麼該按鈕將不再可見。 –

+0

你可以做一件事,爲該按鈕設置一個標籤,並使用[window bringSubviewToFront:[window viewWithTag:1523]]將該按鈕置於前面; –

+0

仍然不會工作..考慮rootview控制器是一個UINavigationController。將按鈕作爲子視圖添加到導航控制器時,所有在該導航控制器上按下(顯示)的視圖控制器都將獲得該按鈕。當你提交一個模式控制器時,按鈕將會在 –

相關問題