2017-07-12 28 views
1

を変更することはできません私はこのようになります私のストーリーボードでセグメント化されたコントロールを作成しました:IOSセグメント化されたコントロール:選択したセグメント

enter image description here

その後、私はときに、コントロールの値が変化するためIBAction作成:

@IBAction func segmentValChanged(_ sender: UISegmentedControl) { 
    print("touched") 
    if (sender.selectedSegmentIndex == 0) { 
     sender.selectedSegmentIndex = 1; 
    } 
    else{ 
     sender.selectedSegmentIndex = 0; 
    } 
} 

唯一の問題は、この関数が呼び出されないことです。 ジョーク(ベータ)ボタンをクリックしても何も起こりません。私は制御のためにIBOutletを作成し、私のviewDidLoad()で選択したセグメントを変更しようとしたとき

しかし、それが働いた:

segmentedController.selectedSegmentIndex = 1 

私は使ったことがないので、私は、私はおそらく何かを明らかに逃した知っています前にセグメント化された制御。 誰がこれが何であるかを指摘できれば、ありがとう。 乾杯!

import UIKit 
import Alamofire 

class ViewController: UIViewController { 

    var currentImage: CurrentImage! 

    var parameters: Parameters! 

    @IBOutlet weak var segmentedController: UISegmentedControl! 


    @IBAction func segmentValChanged(_ sender: UISegmentedControl) { 
     print("touched") 
     if (sender.selectedSegmentIndex == 0) { // switch to 1 
      sender.selectedSegmentIndex = 1; 
     } 
     else{ 
      sender.selectedSegmentIndex = 0; 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     segmentedController.selectedSegmentIndex = 1 
     self.segmentedController.addTarget(self, action: #selector(segmentValChanged(_:)), for: .valueChanged) 
    } 
} 

そして、これは私が右のビューをクリックしたとき、それは次のようになります。 enter image description here

+0

**この機能をIBで '.valueChanged'に結びましたか? – dfd

+0

ええ、私はこれをした –

+0

cosoleは¨touchedメッセージを印刷していますか? –

答えて

3

私はこれを見るたびに、それはほとんど常に同じ問題です...セグメント化されたコントロールは、外を描かされている場合親ビューのである場合、タップに応答しません。これはおそらくあなたが抱えている問題です。 (これもUIButtonsで発生することができます。)これが問題であるかどうかをテストするために

方法を:

  1. はtrueにセグメント化されたコントロールの親のclipsToBoundsを設定します。コントロールが画面に表示されなくなった場合、コントロールは親ビューの外に描画されます。 segmentedControl.superview?.clipsToBounds = true

  2. セグメント化されたコントロールの親に境界線を追加します。コントロールが境界線の外に描画されている場合、そこに移動します。 segmentedControl.superview?.layer.borderWidth = 1

コントロールは、その中に描かれているので、親ビューのサイズを拡大することで、問題を解決します。


補足として、あなたのIBActionが正しくありません。値変更アクションが呼び出されると、セグメント化されたコントロールはすでにに変更され、新しいセグメントが強調表示されます。手動で行う必要はありません。これは、コントロールが親ビューの境界内に描画されていないことを示すもう1つの指標です。

+0

ありがとうございました。この答えは完璧に働いた。 –

関連する問題