如何使用 uistepper 乘以 segue 数据传输中的值 [关闭]

Posted

技术标签:

【中文标题】如何使用 uistepper 乘以 segue 数据传输中的值 [关闭]【英文标题】:how to use uistepper to multiply value from segue data transfer [closed] 【发布时间】:2021-03-12 23:57:59 【问题描述】:

所以我遇到了this question that relates to mine,我想知道如何使用来自 segue 数据传输的值来做到这一点。我希望能够将我的数据传输值用作原始值,并且只有在步进器值发生变化时才会更改该值。

例如,当步进值增加时,我的原始值为 5,10、15、20、25 ... 等等,当它减小时也是如此。我该怎么做?

这是我的数据传输函数:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == Constants.Segues.fromEventDetailsToTicketForm 
        guard let user = Auth.auth().currentUser else  return 
        let vc = segue.destination as! TicketFormViewController
        
        vc.ticketHolderName = user.displayName
        vc.costOfEvent = selectedEventCost
        vc.dateOfEvent = selectedEventDate
        vc.navigationItem.title = selectedEventName
    

这是我的目标 vc 中的全局变量:

 @IBOutlet weak var nameOfTicketHolderLabel: UILabel!
@IBOutlet weak var nameOTicketHolderTextF: UITextField!
@IBOutlet weak var numberOfGuestsLabel: UILabel!
@IBOutlet weak var dateOfEventLabel: UILabel!
@IBOutlet weak var actualDateOfEvent: UILabel!
@IBOutlet weak var totalCostOfEventLabel: UILabel!
@IBOutlet weak var actualCostOfEvent: UILabel!
@IBOutlet weak var guestNumberCount: UILabel!


var ticketHolderName: String?
var costOfEvent: String?
var dateOfEvent: String?
var nameOfEvent: String?

这是我用来连接一切的功能:

  func dataTransferVerification() 
    if let nameToLoad = ticketHolderName 
        nameOTicketHolderTextF.text = nameToLoad
    
    
    if let costToLoad = costOfEvent 
        actualCostOfEvent.text = costToLoad
    
    
    if let dateToLoad = dateOfEvent 
        actualDateOfEvent.text = dateToLoad
    
    
    if let nameToLoad = nameOfEvent 
        navigationItem.title = nameToLoad
    

UIStepper 函数,我不知道在这里放什么:

@IBAction func guestsCount(_ sender: UIStepper) 
    guestNumberCount.text = String(Int(sender.value))
    
  
    

现在我想知道,我得到了什么,如何使用成本值并使其成为原始值,因此当步进值发生变化时,原始值永远不会改变。假设数据传输过来时是 5.00 美元,我只希望 5 美元乘以步进器值,我不希望它改变值。

【问题讨论】:

你在哪里卡住了?想必你知道如何制作 UIStepper。您可能还知道如何将值发送到 segue 中的新视图控制器。问题只是将这个值带入步进器吗?你能显示一些代码吗? 在我链接的问题中,回答的人有一个全局变量50 作为Int,当我进行数据传输时,我不能将该值用作全局变量值,这就是我卡住的地方。我删除了我的代码并尝试了另一种方法,但最终也没有成功。我将在我的目标 vc 中添加我的数据传输代码和全局变量。 @jnpdx 我在您的代码中根本没有看到 UIStepper。似乎您只需要一个额外的变量来存储 $5.00 应该乘以多少次。 问题是它并不总是 5 美元。我怎样才能让它充满活力?如果我将传输的数据值乘以步进值,它将一直乘到无穷大,然后是 10,然后是 30、120、600 .... 等等@jnpdx 费用是通过costOfEvent传入的吗?真的是String吗? 【参考方案1】:

首先,您需要获得成本字符串的数字版本。

在视图控制器的顶部:

private var costDecimal : Decimal = 0

在您所谓的“数据传输”中(您可以在 segue 之前或之后执行此操作 - 并不重要):

let formatter = NumberFormatter()
formatter.numberStyle = .currency

if let number = formatter.number(from: str) 
    let amount = number.decimalValue
    print(amount)
    self.costDecimal = amount

(取自https://***.com/a/41884823/560942)

现在,在您的步进器中:

@IBAction func guestsCount(_ sender: UIStepper) 
    guestNumberCount.text = String(Int(sender.value))
    //multiply sender.value by the cost that was passed in
    let totalCost = Decimal(sender.value) * costDecimal

【讨论】:

以上是关于如何使用 uistepper 乘以 segue 数据传输中的值 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UIStepper 保存到 CoreData (swift 3)

swift - 如何从另一个类设置 UIStepper 值?

如何将“标签”字段中的数字值除以 UIStepper 的值?

在准备 segue 时,如何将数据传递给子 UIViewController?

UIStepper 吞下触摸

当 UIStepper 在 Swift 4 中以编程方式点击时如何更改 UILabel 的文本,如果它们都在 UITableViewCell 中?