View 터치를 배타 제어하자

4966 단어 iOSSwiftObjective-C

소개



비교적 중요하다고 생각되는 버튼 동시 누름 등을 막는 배타 제어에 사용하는 속성 "exclusiveTouch".
이전에 드디어 사용할 기회가 있었다(사용한 적은 있었지만, 완전히 잊고 있었을 가능성도 있습니다만.) 때문에, 기사로 해 보기로 했습니다.

exclusiveTouch란?



빙글빙글 보면, UIButton에서 사용하는 예가 많이 나옵니다만, 실은 "exclusiveTouch"는 UIView 클래스의 프로퍼티입니다.



Swift라면 true, Obj-C라면 YES를 대입하면 동시 누르기를 금지할 수 있습니다.
nohirapView.exclusiveTouch = true
nohirapView.exclusiveTouch = YES;

이전에 사용했을 때





UIButton 대신 UICollectionView 헤더와 셀에서 사용했습니다.
상당히 변경하거나 끝을 접었습니다만, 이하의 느낌입니다.
//MARK:- UICollectionViewDataSource
extension NohirapViewController: UICollectionViewDataSource {
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("NohirapCollectionViewCell", forIndexPath: indexPath) as! NohirapCollectionViewCell

        // この辺りでセルのアイテムをセットする

        cell.exclusiveTouch = true

        return cell
    }

    func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
        if kind == UICollectionElementKindSectionHeader {
            if let bannerView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "NohirapBannerCollectionViewCell", forIndexPath: indexPath) as? NohirapBannerCollectionViewCell {
                bannerView.exclusiveTouch = true

                return bannerView
            }
        }

        // この辺りで色々やる
    }
}

왜 사용했는가



실은, 지금 종사하고 있는 안건의 테스트 팀이 찾아낸 버그가 계기였습니다.
솔직히, collectionView의 헤더나 셀의 동시 누르는 상정하고 있지 않았습니다만, 유저에게는 여러분이 계신다고 생각하기 때문에, 이러한 뒷 기술적인 조작에 대응할 때 어쩐지 "exclusiveTouch"는 편리하다 하는 것 같아요.

요약



exclusiveTouch는 UIButton 및 UICollectionViewCell과 같은 UIView의 하위 클래스를 동시에 누르는 것을 금지하는 데 매우 유용합니다.
동시 밀기를 허용하는 설계 이외에서는 자세하게 설정해 두면 좋다고 느꼈습니다.

좋은 웹페이지 즐겨찾기