如何在iOS(Xcode)中的提交按钮内实现分段控制?

Posted

技术标签:

【中文标题】如何在iOS(Xcode)中的提交按钮内实现分段控制?【英文标题】:How to implement segmented control inside submit button in iOS (Xcode)? 【发布时间】:2018-10-06 07:18:24 【问题描述】:

我在提交按钮中有一个针对性别的分段控件,但是,它给出了一个错误说明:

“无法将类型“String”的值分配给类型“UISegmentedControl!”“

有人知道如何在按钮内正确编码分段控件,以便当用户单击提交按钮时,它会在页面上显示选定的性别?

编辑:我要回答的问题是:

“实现一个应用程序,其中包括姓名、地址和步进器(年龄)和两个分段控件(“男性/女性”和“已注册/未注册”)的输入字段。当用户单击提交按钮时,它会在页面上显示诸如您好姓名、地址:地址、年龄:年龄、性别:男/女、状态:已注册/未注册等消息。”

这是我的代码:

import UIKit

class ViewController: UIViewController 

@IBOutlet weak var nametxt: UITextField!
@IBOutlet weak var age: UIStepper!
@IBOutlet weak var addresstxt: UITextField!
@IBOutlet weak var status: UISegmentedControl!
@IBOutlet weak var gender: UISegmentedControl!
@IBOutlet weak var display: UILabel!


override func viewDidLoad() 
    super.viewDidLoad()

    age.wraps = true
    age.autorepeat = true
    age.maximumValue = 100


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.


@IBAction func submit(_ sender: Any) 
    var txtname : String
    var txtaddress : String
    txtname = nametxt.text!
    txtaddress = addresstxt.text!


    if self.gender.selectedSegmentIndex == 0 
        gender = "male"
    

    if self.gender.selectedSegmentIndex == 1 
        gender = "female"
    

    display.text = "Hello " + txtname + ", " + "Address: " + txtaddress  
    + ", " + "Gender: " + gender

  
 

【问题讨论】:

为什么要把段控制放到按钮上?您只能自行获得分段控制的操作。 那是导师给的任务……当用户点击按钮时,应该会显示分段控件的结果 很明显,gender = "male"gender = "female" 是无意义的代码。你能说说你的目标是什么吗? 所以这是完整的问题。“实现一个应用程序,其中包括姓名、地址和步进器(用于年龄)和两个分段控件(用于“男性/女性”和“已注册/ Not Enrolled”)。当用户点击提交按钮时,会在页面上显示诸如 Hello Name、Address: Address、Age: Age、Gender: Male/Female、Status: Enrolled/Not Enrolled 等信息。”跨度> 这个问题是由于缺乏 Swift 和 UIKit 知识造成的......我建议您阅读 Apple 文档并弄清楚 SegmentControl API 必须提供什么。另外,我不鼓励您在任何地方使用强制解包。这是不好的做法...... 【参考方案1】:

编译器简单描述了这个错误的原因:) 只需使用String而不是SegmentControl...性别是SegmentControl类型,因此您不能将其与其他字符串连接...

使用titleForSegment(at:) 获取正确的字符串值

display.text = "Hello " + txtname + ", " + "Address: " + txtaddress + ", " + "Gender: " + gender.titleForSegment(at: gender.selectedSegmentIndex)

而且你可以摆脱上面的条件...

其他选项是在IBAction 中设置新的私有属性

@IBAction func submit(_ sender: Any) 
    // Fixed your codestyle and semantics as well
    let txtname = nametxt.text ?? "missing name"
    let txtaddress = addresstxt.text ?? "missing address"

    let txtgender = gender.titleForSegment(at: gender.selectedSegmentIndex)
    display.text = "Hello " + txtname + ", " + "Address: " + txtaddress  
    + ", " + "Gender: " + txtgender

  
 

`https://developer.apple.com/documentation/uikit/uisegmentedcontrol/1618561-titleforsegment

【讨论】:

以上是关于如何在iOS(Xcode)中的提交按钮内实现分段控制?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中的按钮内从 UITableViewController 更改为 ViewController

Xcode - 分段控制更改为默认值

如何在 iOS 9 正式发布之前提交 iOS 9 的应用更新?

由于信号分段错误,命令失败 11 Xcode 9 - iOS 模拟器

使用分段控制在 ios 中的视图之间切换视图

RadioGroup实现类似ios的分段选择(UISegmentedControl)控件