簡體   English   中英

在Xcode / Swift 3中點擊視圖以“選擇”它

[英]Tapping a view in xcode / swift 3 to 'select' it

我希望通過單擊來磨練用於“選擇” UIView的方法。 在我的用戶界面中,我有幾個希望被“選擇”的UIView。 選中后,我將具有執行基本調整的控件,例如alpha(讓用戶知道選擇了哪個視圖),以及一些更高級的功能,例如顯示一組獨特的菜單項。 一次只能選擇1個視圖。 這里沒有多點觸控。

問題是,我只用UICollectionViewCells看到了這一點。 我的界面沒有利用集合視圖,所以這是不可能的。

進入此過程的思考過程是1個點擊手勢以“選擇” UIview,然后通過在視圖邊界之外點擊來“取消選擇”它。

另一個思考過程是使用UIButtons而不是UIViews來利用Selected狀態。

哪一個是更可行的解決方案? 僅使用UIViews,這是否可能? 還是應該回溯並改用UIButtons?

謝謝。

您需要將手勢識別器添加到所需的UIView

class ViewController: UIViewController, UIGestureRecognizerDelegate {
    @IBOutlet weak var myView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let tap = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
        tap.delegate = self
        myView.addGestureRecognizer(tap)

    }

}

然后,您需要在手勢識別器函數中添加代碼以處理UIView發生的任何情況:

func tap(_ gestureRecognizer: UITapGestureRecognizer) {
    myView.alpha = 0.5
}

一旦選擇了UIView,這會將UIView的alpha屬性更改為0.5。 在此處輸入圖片說明 在此處輸入圖片說明

現在,例如,您可以放置​​另一個帶有手勢識別器的UIView並使用Alpha:

class ViewController: UIViewController, UIGestureRecognizerDelegate {
    @IBOutlet weak var myView: UIView!
    @IBOutlet weak var secondView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let tap = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
        tap.delegate = self
        myView.addGestureRecognizer(tap)

        let tap2 = UITapGestureRecognizer(target: self, action: #selector(self.tap2(_:)))
        tap.delegate = self
        secondView.addGestureRecognizer(tap2)

    }

    func tap(_ gestureRecognizer: UITapGestureRecognizer) {
        myView.alpha = 0.5
        secondView.alpha = 1
    }

    func tap2(_ gestureRecognizer: UITapGestureRecognizer) {
        myView.alpha = 1
        secondView.alpha = 0.5
    }

}

這樣,根據您擊中的UIView,alpha值將發生變化...

在此處輸入圖片說明 在此處輸入圖片說明

編輯:

在此代碼中,將“選擇” UIViews-字母將更改,並會在設置的0.8秒時間內變回原來的狀態。

class ViewController: UIViewController, UIGestureRecognizerDelegate {
    @IBOutlet weak var myView: UIView!
    @IBOutlet weak var secondView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let tap = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
        tap.delegate = self
        myView.addGestureRecognizer(tap)

        let tap2 = UITapGestureRecognizer(target: self, action: #selector(self.tap2(_:)))
        tap.delegate = self
        secondView.addGestureRecognizer(tap2)

    }

    func tap(_ gestureRecognizer: UITapGestureRecognizer) {
        myView.alpha = 0.5
        UIView.animate(withDuration: 0.8, animations: { 
            self.myView.alpha = 1
        })
    }

    func tap2(_ gestureRecognizer: UITapGestureRecognizer) {
        secondView.alpha = 0.5
        UIView.animate(withDuration: 0.8, animations: {
            self.secondView.alpha = 1
        })
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM