3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Swift】UISegmentedControlで同じセグメントを2回タップしたら選択解除する方法

Last updated at Posted at 2017-01-21

デモ

sc.gif

手順

1. カスタムクラスを作成

まずUISegmentedControlのカスタムクラスを作成します。
⌘+Nで新規ファイル作成画面にいきます。
Cocoa Touch Classを選択し、Nextをクリック。
1.png

次にクラス名を適当に付けて、SubclassにUISegmentedControlを選んでNext。
次の画面でファイルの保存場所を指定して作成します。
2.png

そして作成したカスタムクラスを以下の様に記述します。

CustomSegmentedControl.swift
import UIKit

class CustomSegmentedControl: UISegmentedControl {

    var oldValue : Int!
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.oldValue = self.selectedSegmentIndex
        super.touchesBegan(touches, with: event )
    }
    
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event )
        
        if self.oldValue == self.selectedSegmentIndex
        {
            sendActions(for: .valueChanged )
        }
    }

}

2. カスタムクラスを適応

設置したUISegmentedControlに先程作成したカスタムクラスを適応させます。
3.png

3. 紐付け

UISegmentedControlをViewControllerに紐付けします。

設置したUISegmentedControlを扱うためにOutletで接続。
4.png

タップイベントを取得するためにActionでも接続。
5.png

4. タップした時の処理を記述

値を入れる変数を用意して、タップ時の処理を記述して完成です。

ViewController.swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var sexSC: CustomSegmentedControl!
    var sex: String = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    
    @IBAction func sexSCDidTapped(_ sender: CustomSegmentedControl) {
        let selectedIndex = sexSC.selectedSegmentIndex

        if sex == sexSC.titleForSegment(at: selectedIndex)! {
            sexSC.selectedSegmentIndex = UISegmentedControlNoSegment // 選択解除
            sex = ""
        } else {
            sex = sexSC.titleForSegment(at: selectedIndex)!
        }
        print(sex)
    }
    
}

参考:detect event when tapped on already selected segment - Stack Overflow

3
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?