【问题标题】:Calling button actions in segmented control在分段控制中调用按钮操作
【发布时间】:2019-10-24 14:47:44
【问题描述】:

我有一个分段控制动作方法,有两个段

@IBAction func segmentChanged(_ sender: UISegmentedControl) { 

    // What goes here for displaying data similar to buttonsTapped? 
}

我有如下三个按钮

 @IBOutlet weak var buttonOne: UIButton!
 @IBOutlet weak var buttonTwo: UIButton!
 @IBOutlet weak var buttonThree: UIButton!

我对所有 3 个按钮都有一个操作方法,

 @IBAction func buttonsTapped(_ sender: UIButton) { 

    switch sender {
    case buttonOne:
     print("Button one Tapped")
    case buttonTwo:
     print("Button two tapped")
    case buttonThree:
     print("Button three tapped")
    default: break
    }

  if segmentedControl.selectedSegmentIndex == 0
        {
            print("First Segment")
        }
        else
        {
            print("Second Segment")
        }
  }

当我点击 buttonOne 时,我得到了 "First Segment""Button One Tapped",因为它在第一段中。同样,buttonTwo 和 buttonThree 在控制台上显示正确的消息。

但是当我更改分段控件时,我没有在控制台上收到任何消息。我尝试在segmentChanged 方法中调用buttonOne.sendActions(for: .touchUpInside),它仅适用于buttonOne 并弄乱了其他人。更改段时,如何为所有按钮和段获取正确的消息?提前致谢。

【问题讨论】:

  • segmentedControl.selectedSegmentIndex 代码需要放在segmentChanged 中而不是buttonsTapped 如果segmentedControl 中没有任何变化,则selectedSegmentIndex 将为零
  • 好吧,我希望通过分段更改和按钮点击方法在控制台上打印数据。
  • @Coder221 - 您想在按钮操作中执行此操作,否则
  • @Anbu.Karthik 是的,在分段控件的按钮操作中也是如此,或者有什么更好的方法来显示两端的数据?
  • 是的,我们可以...

标签: ios swift uibutton uisegmentedcontrol


【解决方案1】:

Segment Control 值的改变将使用以下方法记录

   @IBAction func segmentChanged(_ sender: UISegmentedControl) { 
    if sender.selectedSegmentIndex == 0
            {
                print("First Segment")
            }
            else
            {
                print("Second Segment")
            }
    }

按钮操作将使用以下方法记录:

@IBAction func buttonsTapped(_ sender: UIButton) { 

    switch sender {

    case buttonOne:
     print("Button one Tapped")
    case buttonTwo:
     print("Button two tapped")
    case buttonThree:
     print("Button three tapped")
    default: break
    }
}

这两种方法无法组合,因为按钮关联到内部事件的修饰,分段控件关联到值更改事件

【讨论】:

  • 我正在尝试从两端显示数据。如问题中所述,我成功地使其在buttonsTapped中工作。通过为一个按钮调用 .touchUpInside ,我在上面提到的 segmentChanged 方法中取得了部分成功,并且对如何实现剩余的两个按钮感到困惑。
【解决方案2】:

您需要将UISegmentedControl 方法设置为.valueChange 而不是.touchUpInside

如下所示:

并添加以下方法。

代码:

@IBOutlet weak var buttonOne            : UIButton!
@IBOutlet weak var buttonTwo            : UIButton!
@IBOutlet weak var buttonThree          : UIButton!
@IBOutlet weak var segmentedControl     : UISegmentedControl!

var selectedButton                      : UIButton!

@IBAction func buttonsTapped(_ sender: UIButton) {

    selectedButton = sender

    switch sender {

    case buttonOne:
        print("Button one Tapped")

    case buttonTwo:
        print("Button two tapped")

    case buttonThree:
        print("Button three tapped")

    default: break
    }

    if self.segmentedControl.selectedSegmentIndex == 0 {
        print("First Segment")
    } else {
        print("Second Segment")
    }
}


@IBAction func segmentChanged(_ sender: UISegmentedControl) {
    if sender.selectedSegmentIndex == 0
    {
        self.selectedButton.sendActions(for: .touchUpInside)
    }
    else
    {
        self.selectedButton.sendActions(for: .touchUpInside)
    }
}

【讨论】:

  • 它是为 .valueChange 设置的
  • imgur.com/a/n1xNBdl 。我正在尝试从按钮和分段控件中获取相同的数据。希望,我的问题很清楚。
  • @Coder221,没关系,然后发生了什么?
  • 分享演示项目。
  • 当我单击第一个分段控件以及类似的“第一个分段”和“两个点击的按钮”、“第一个分段”和“按钮”时,如何将“第一个分段”和“一个点击的按钮”放在一起三连击”?
猜你喜欢
  • 1970-01-01
  • 2015-04-16
  • 2018-11-26
  • 2014-11-04
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
相关资源
最近更新 更多