如何在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
如何在 iOS 9 正式发布之前提交 iOS 9 的应用更新?