2015-09-13 81 views
0

就像navigationController?.hidesBarsOnTap = true隱藏導航欄一樣,如何隱藏常規UI元素(如按鈕,標籤等)並輕按視圖?我從頭開始創建一個PDF查看器,現在我需要一種方法,可以通過點擊來隱藏視圖上的UI元素,就像Photos應用在iPhone上執行的操作一樣。如何使用swift在視圖的一個水龍頭上隱藏UI元素?

這是我嘗試使用的代碼,但沒有成功:

override func viewDidAppear(animated: Bool) { 
     var dismissTap = UITapGestureRecognizer(target: self, action: Selector("dismissViewElements:")) 

     self.view.addGestureRecognizer(dismissTap) 

    } 

    func dismissViewElements(gesture: UITapGestureRecognizer){ 
     if gesture.state == UIGestureRecognizerState.Began { 
      self.backButton.alpha = 0 
     } 
    } 

任何建議將是非常有益的。

回答

1

我想我明白你想要什麼。點擊視圖,你想隱藏一堆「工具」(編輯按鈕等)。想到的應用程序是隨iPhone附帶的照片查看器應用程序,當您點擊一次,編輯/裁剪/後退按鈕等......都隱藏起來。

最簡單的方法(在我看來)是將所有這些ui控件添加到父視圖,在單獨的「圖層」上。並將該圖層作爲頂層。當用戶點擊此視圖時(只要它不是按鈕或父視圖內的某個按鈕)視圖就會消失(以及其所有子按鈕/控件等)。

我個人會使用touchesEnded,因爲它真的易於實施。繼承人的touchesEnded方法應該是什麼樣子(或多或少)

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { 
     self.hidden = true 
     //where parentView is the parent view, whatever you named it 
    } 

,你應該準備就緒,我認爲

也,我忘了提,你應該繼承一個UIView,並有這裏面的touchesEnded特別是實施UIView,並在故事板,你可以點擊你正在使用作爲父母的UIView,並給它不管你命名的子類

的類類型我推了一個快速的項目你github來說明這個想法


更新 - 使元素再次出現

你可以做一些非常相似。有一個父母UIVIew,裏面有一個孩子UIVIew,孩子內部的所有按鈕/工具UIView。通過這種方式,您可以在父母UIViewtouchesEnded上隱藏孩子UIViewtouchesEnded再次讓孩子UIView重新出現。你有內部touchesEnded做的是以下幾點:

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { 
      childUiView.hidden = !childUiView.hidden 
     } 

這樣,每次你觸摸它的時候,它會分配給hidden什麼是相反的。

+0

這種方法可以幫助他們在點擊時消失,但是如何讓他們在點擊時重新出現 –

+0

您可以做類似的事情。有一個父'UIVIew',裏面有一個'UIVIew',以及'UIView'子裏面的所有按鈕/工具。這樣,在父'UIView'的'touchesEnded'上,你可以隱藏子'UIView'和'touchesEnded',再次讓子'UIView'出現。 'touchesEnded'內所有你需要做的事情如下:'childUiView.hidden =!childUiView.hidden''這樣,每次你觸摸它,它都會將'hidden'賦值給它的相反。我也會用這個更新答案 –

0

您必須添加一個Tap gesture recognizer到您的項目,然後做一個插座/動作。在此操作中,您設置了alpha或隱藏屬性。

+0

但是代碼的外觀應該如何,例如,如果我想通過點擊視圖來關閉視圖上的按鈕。 –

+0

您是否曾經使用過一個應用程序來關閉導航欄和工具欄?特別是PDF /圖書閱讀應用程序?以及我想要應用相同的水龍頭解僱方法,但在常規UI元素上,如按鈕,標籤等。不是導航欄或工具欄 –

0

你的問題非常模糊/寬泛。你需要哪些幫助?你有什麼嘗試?

非常籠統:

創建敲擊手勢識別。將其附加到您想要點按的視圖。讓它在視圖控制器中調用一個方法。我們稱之爲toggleControls:

該方法需要將手勢識別器作爲參數。

將一個Bool屬性controlsAreHidden添加到您的VC中。

在toggleControls方法中,切換controlsAreHidden的狀態。

編寫的代碼顯示controlsAreHidden == true時的控件,並在controlsAreHidden == false時隱藏它們。

+0

您是否曾經使用過一個應用程序來關閉導航欄和工具欄視圖?特別是PDF /圖書閱讀應用程序?以及我想應用相同的水龍頭解僱方法,但在常規的UI元素,如按鈕,標籤等。不是一個導航欄或工具欄 –

+0

你需要幫助什麼部分?你有什麼嘗試? –

+0

我已經嘗試添加一個tapGesture,將它添加爲我的視圖 –

相關問題