2016-05-16 49 views
0

我有一個筆尖在我的故事板沒有連接到任何東西,但我實例化它作爲一個子視圖正是如此:的iOS UIButton的編程中的實例子視圖不點火

-(void)LoadCameraOverlayView 
{ 

    CameraOverlayViewController *cameraVC = [self.storyboard instantiateViewControllerWithIdentifier:@"CameraOverlayNib"]; 
    cameraVC.view.userInteractionEnabled = YES; 
    [self.view addSubview:cameraVC.view]; 
} 

的UIViewController中已經與反饋的攝像頭,工作正常,並且一個按鈕(當我繼續到視圖控制器也可以正常工作)。

該按鈕鏈接到Touch Down事件和Touch Up Inside事件。

當我點擊按鈕時,我可以看到它從默認狀態變爲可見狀態或突出顯示狀態,但是沒有任何代碼正在執行。如果我把一個NSLog放在ViewDidLoad中,我可以在控制檯中看到,但不能看到鏈接的方法。但是,如果我繼續看到它的確如此。

任何想法發生了什麼?

我看了其他的解決方案,但我不認爲這可能是有一個視圖的方式或CGRect沒有正確校準或任何東西,因爲我可以看到點擊按鈕時的視覺變化。

謝謝。

+0

你在哪裏爲CameraOverlayViewController中的按鈕touchDown和touchUp添加了選擇器?在界面構建器中還是以編程方式完成? – Dare

回答

4

此代碼違反規則的一個如何使用視圖控制器:

CameraOverlayViewController *cameraVC = [self.storyboard instantiateViewControllerWithIdentifier:@"CameraOverlayNib"]; 
[self.view addSubview:cameraVC.view]; 

你不能簡單地創建一個視圖控制器,然後手動添加它以這樣的視圖層次結構。對此有非常嚴格的規定;有一個精心製作的「舞蹈」,你必須做的手動添加一個視圖控制器的視圖到你的界面,而你沒有做舞蹈。

結果是,你的cameraVC成立,在視圖控制器層次結構中沒有被賦予任何位置,並消失在一片煙霧中。因此沒有任何對象可以與您的按鈕進行對話,因此當按鈕被點擊時,什麼都不會發生。

我的建議是:使用.xib文件,而不是故事板場景;並且在您將它加載並放入界面後,使用代碼來配置按鈕,以便它與self,您的當前視圖控制器通話。

+0

感謝您的回覆,我會研究它。你知道任何資源,可以指出我在正確的方向與如何學習更好的編碼實踐呢?你可能還能夠向我解釋如何將xib加載到界面中?最後你是否暗示我使用故事板視圖控制器作爲委託? – AlecGamble

+0

「你還可以向我解釋如何將xib載入界面?」當然;我的在線書籍向你解釋:http://www.apeth.com/iOSBook/ch07.html#_nib_loading_and_file_8217_s_owner – matt

+0

這裏是一個實際可下載的例子,我只是在做我建議你做的事情(在我的'viewDidLoad' ):我從一個筆尖加載視圖,將其放入界面,並在代碼中配置其按鈕:https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/iOS7bookExamples/bk2ch10p524keyboardAccessory/ch21p808keyboardAccessory /ViewController.m – matt