【发布时间】:2023-03-16 07:30:01
【问题描述】:
我的视图上有两个 UIButton,一个用于 FM 收音机,一个用于 AM 收音机。 当按下 FM 按钮时,我想在各自的标签中显示电台名称、频率和带宽值的 FM 值,对于 AM 也是如此。
我为每个按钮使用单独的 buttonClick 方法的工作代码,但由于代码相同,我想尝试在一个方法中完成所有操作。下面是这个可恶的!
这里是按钮按下方法的代码。
@IBAction func buttonClick(_ sender: Any) {
if buttonFM != nil {
if myStation.isBandFM() == 1 {
stationBand.text = "FM1"
stationName.text = myStation.name //set top left label text to name property of myStation object
stationFrequency.text = "\(myStation.frequency)"
}
} else if buttonAM != nil {
if myStation.isBandFM() == 0 {
stationBand.text = "AM1" //final exercise, part 1.
stationName.text = myStationAM.name
stationFrequency.text = "\(myStationAM.frequency)"
}
}
}
这是整个视图控制器代码:
class ViewController: UIViewController {
@IBOutlet weak var stationName: UILabel!
@IBOutlet weak var stationFrequency: UILabel!
@IBOutlet weak var stationBand: UILabel!
@IBOutlet weak var buttonFM: UIButton!
@IBOutlet weak var buttonAM: UIButton!
var myStation: RadioStation //FM station
var myStationAM: RadioStation //AM station
required init?(coder aDecoder: NSCoder) {
myStation = RadioStation()
myStationAM = RadioStation()
myStation.frequency = 104.7
myStationAM.frequency = 800.2
myStation.name = "FM1"
myStationAM.name = "AM1"
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
stationName.text = nil
}
@IBAction func buttonClick(_ sender: Any) {
if buttonFM != nil {
if myStation.isBandFM() == 1 {
stationBand.text = "FM1"
stationName.text = myStation.name //set top left label text to name property of myStation object
stationFrequency.text = "\(myStation.frequency)"
}
} else if buttonAM != nil {
if myStation.isBandFM() == 0 {
stationBand.text = "AM1" //final exercise, part 1.
stationName.text = myStationAM.name
stationFrequency.text = "\(myStationAM.frequency)"
}
}
}
这是类方法:
class RadioStation: NSObject {
var name: String
var frequency: Double
override init() { //init class method to set default values.
name = "Default"
frequency = 100
}
static var minAMFFrequency: Double = 520.0
static var maxAMFFrequency: Double = 1610.0
static var minFMFFrequency: Double = 88.3
static var maxFMFFrequency: Double = 107.9
func isBandFM() -> Int {
if frequency >= RadioStation.minFMFFrequency && frequency <= RadioStation.maxFMFFrequency {
return 1 //FM
} else {
return 0 //AM
}
}
【问题讨论】:
-
在您的
@IBAction func buttonClick中,if问题是错误的问题。问题是:sender是谁? -
我很难弄清楚如何将 FM 按钮和 AM 按钮识别为发送者。我可以通过按钮的文本进行检查吗?这听起来不太好/好像它会起作用。
-
安全地向下转换到 UIButton 并使用
===。 -
我尝试
if buttonFM.isTouchInside == true来识别发件人,但没有成功。 -
“如果按下按钮将起作用” 您已经知道按下了按钮。如果没有,你就不会在这里。问题是哪一个。发件人就是那个。它在尖叫我我我。你所要做的就是倾听。