【问题标题】:Two different buttons performing segue to same view controller but want to disable user interaction for segue through one button两个不同的按钮对同一个视图控制器执行 segue,但希望通过一个按钮禁用用户交互以进行 segue
【发布时间】:2016-09-17 08:27:51
【问题描述】:

我正在从同一屏幕上的两个不同按钮对同一视图控制器执行 segue,因此使用相同的 segue 标识符。说按钮是 B1 和 B2。因此,当我从 B1 的 segue 执行 segue 时,我希望目标视图控制器禁用用户交互,但是当我从 B2 进行 segue 时,我希望目标视图控制器是可点击的,并且它的文本字段是可编辑的。请帮我实现它。在这里...考虑 B2 被部分压制和 B1 被 toplbl 并请帮助我使用此代码实现它,所以建议我可以在这里进行更改。

@IBAction func partialPressed(sender: UIButton)
{
    let i = self.getIndex(sender.tag)
    let j = self.getSection(sender.tag)
    let indexarr = ["index":i, "section":j]

    if getSection(sender.tag) == 0
    {

    let arr = getArray(sender.tag)
    performSegueWithIdentifier("partialSupplement", sender: arr)

    }
    else if getSection(sender.tag) == 1
    {
        let arr = getArray(sender.tag)
        performSegueWithIdentifier("PartialPopup", sender: arr)




    }

    else if getSection(sender.tag) == 2
    {
        let arr = getArray(sender.tag)
        performSegueWithIdentifier("FoodLifestyle", sender: arr)



    else if getSection(sender.tag) == 3
    {
        let arr = getArray(sender.tag)
        performSegueWithIdentifier("Food", sender: arr)


    else if getSection(sender.tag) == 4
    {
        let arr = getArray(sender.tag)
        performSegueWithIdentifier("Others", sender: arr)
      task.resume()
    }

}

@IBAction func toplbl(sender: UIButton){

    let i = self.getIndex(sender.tag)
    let j = self.getSection(sender.tag)
    let indexarr = ["index":i, "section":j]

    if getSection(sender.tag) == 0
    {
              task.resume()

        let arr1 = getArray(sender.tag)
        performSegueWithIdentifier("partialSupplement", sender: arr1)





    }
    else if getSection(sender.tag) == 1
    {
        let arr1 = getArray(sender.tag)
        performSegueWithIdentifier("PartialPopup", sender: arr1)


    }

    else if getSection(sender.tag) == 2
    {
        let arr1 = getArray(sender.tag)
        performSegueWithIdentifier("FoodLifestyle", sender: arr1)

              task.resume()
    }

    else if getSection(sender.tag) == 3
    {
        let arr1 = getArray(sender.tag)
        performSegueWithIdentifier("Food", sender: arr1)
          task.resume()
    }

    else if getSection(sender.tag) == 4
    {
        let arr1 = getArray(sender.tag)
        performSegueWithIdentifier("Others", sender: arr1)
                 task.resume()
    }

}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "menuviewcontroller"
    {
        let menuTableViewController = segue.destinationViewController as! MenuViewcontroller
        menuTableViewController.transitioningDelegate = menuTransitionManager
        menuTransitionManager.delegate = self

       // menuTableViewController.customchildcelldataarray = self.customchildcelldataarray

    }
    if segue.identifier == "PartialPopup"
    {
        let popupViewController = segue.destinationViewController as! PatialViewController
        popupViewController.arr = sender as! CustomcomingupDataWorkOut
        //popupViewController.timings_id = popupViewController.arr.timings_id
        //menuTransitionManager.delegate = self
        // menuTableViewController.customchildcelldataarray = self.customchildcelldataarray

    }
    if segue.identifier == "partialSupplement"
    {
        let popupViewController = segue.destinationViewController as! PartialSupplementViewController
        var arr = sender as! CustomcomingUpDataSupplements
        popupViewController.lifestyletype = arr.supplementName
        popupViewController.lifestyleItem = arr.amount + arr.unit
        popupViewController.lifestyleQuantity = arr.dosage_main_name
        popupViewController.timings_id = arr.timings_id



        //popupViewController.arr = sender as! CustomcomingUpDataSupplements
        //popupViewController.timings_id = popupViewController.arr.timings_id
        //menuTransitionManager.delegate = self
        // menuTableViewController.customchildcelldataarray = self.customchildcelldataarray

    }

    if segue.identifier == "FoodLifestyle"
    {
        let popupViewController = segue.destinationViewController as! partialFoodViewController
        var arr = sender as! CustomcomingUpDataLifeStyle
        popupViewController.lifestyletype = arr.lifestyle_name
        popupViewController.lifestyleItem = arr.time + " minutes"
        popupViewController.lifestyleQuantity = "Time"
        popupViewController.timings_id = arr.timings_id


        //popupViewController.arr = sender as! CustomcomingupDataWorkOut
        //menuTransitionManager.delegate = self
        // menuTableViewController.customchildcelldataarray = self.customchildcelldataarray

    }
    if segue.identifier == "Food"
    {
        let popupViewController1 = segue.destinationViewController as! FoodViewController
        var arr = sender as! CustomcominUpDataFood
        print(arr)
        popupViewController1.type = arr.food_name
        popupViewController1.Item = arr.time
        popupViewController1.Quantity = " Amount"
        popupViewController1.timings_id = arr.timings_id


        //popupViewController.arr = sender as! CustomcomingupDataWorkOut
        //menuTransitionManager.delegate = self
        // menuTableViewController.customchildcelldataarray = self.customchildcelldataarray

    }
    //Others
    if segue.identifier == "Others"
    {
        let popupViewController = segue.destinationViewController as! PartialOthersViewController
        var arr = sender as! CustomcominUpDataOthers
        popupViewController.lifestyletype = arr.others_name
        popupViewController.lifestyleItem = arr.time + " minutes"
        popupViewController.lifestyleQuantity = "Completion"
        popupViewController.timings_id = arr.timings_id
        //popupViewController.arr = sender as! CustomcomingupDataWorkOut
        //menuTransitionManager.delegate = self
        // menuTableViewController.customchildcelldataarray = self.customchildcelldataarray

    }

}

【问题讨论】:

  • 检查prepareForSegue中的发件人并在目标视图控制器上设置一个属性
  • @Paulw11 ..你能给我完整的功能吗?我需要为此传递额外的对象吗?

标签: ios swift xcode segue uistoryboardsegue


【解决方案1】:

使用prepareForSegue: 方法。 iOS 会将按钮作为sender 参数传递给您,并且还将目标视图控制器作为UIStoryboardSegue 参数的一部分提供。

检查sender 看它是B1 还是B2。当发送者为B2时,在segue的目标控制器中禁用用户交互:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: Any?) {
    if segue.identifier == "MySegue" {
        let enableInteration = (sender != button2)
        segue.destinationViewController.view.userInteractionEnabled = enableInteration
    }
}

【讨论】:

  • 您正在目标视图控制器或初始视图控制器中检查此内容,即从您正在执行 segue 的视图控制器中检查?
  • @Rouny 这发生在“来自”控制器中。
  • 你能建议我改变一下我的代码吗......我在帖子中粘贴的代码。
  • @Rouny if 中的两行进入if 代码中的if(sender != button2) 需要更改以匹配您对 sender 是否为按钮 B2 的决策。
  • 实际上该按钮已作为此视图控制器中的函数链接,因此我无法将其用作内部的条件对象(如果 sender = )
【解决方案2】:

您可以使用一个键,并在调用 segue 之前更改该键的值。并根据该键更改按钮/文本字段等的交互。这是一种解决方法,也许您会得到比这更好的答案。

【讨论】:

    【解决方案3】:

    我找到了一个简单的方法。我们可以为部分按下的按钮声明一个全局或局部布尔变量,我们可以将其设置为 true,对于 toplbl 按钮,我们可以将其设置为 false,然后我们有两种方法来禁用用户交互:

    1. 如果 bool 是全局的:转到目标视图控制器并在内部视图中加载检查 if bool == false 然后设置 self.view.userinteraction = false

    2. 如果 bool 是局部变量:转到初始视图控制器内的 prpareforsegue 并检查是否 bool == false 然后设置 segue.destinationviewcontroller.view.userinteraction = false

    【讨论】:

      【解决方案4】:

      您也可以使用 Int,如下所示:

      var buttonIndex = 0
      
      @IBAction func partialPressed(sender: UIButton){
      
      buttonIndex = 1
      performSegueWithIdentifier("PartialPopup", sender: sender)
      
      }
      
      @IBAction func toplbl(sender: UIButton){
      
      buttonIndex = 2
      performSegueWithIdentifier("PartialPopup", sender: sender)
      
      }
      

      然后:

      override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
      
      destVC == segue.destination
      destVC.buttonIndex = self.buttonIndex
      
      }
      

      然后,在 destVC 中:

      var buttonIndex = 0
      
      switch buttonIndex{
      
      case 1:
      // Do whatever magic is desired if partialPressed was tapped
      
      case 2:
      // Do whatever magic is desired if toplbl was tapped
      
      default:
      break
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-28
        • 1970-01-01
        • 2019-02-02
        • 1970-01-01
        • 2012-03-25
        • 1970-01-01
        相关资源
        最近更新 更多