現在、各TableViewセルにあるセグメント化されたコントロールのインデックス値を格納する辞書を使用しています。各セグメント化されたコントロールには、それが入っている行のインデックスパスに対応するタグがあります。ディクショナリのみ1つのキーと値を格納する/以前のキーと値を上書きする
辞書では、キーはセグメント化されたコントロールのタグ(またはセグメント化されたコントロールが入っている行のインデックスパス、あなたはしてください)、値はセグメント化されたコントロール自体のインデックスです(つまり、オプション0はインデックス0に対応し、オプション1はインデックス1に対応します)。そこに3行であり、最初のセグメント化されたコントロールがオプション0選択した場合
ので、辞書は次のようになり、第二には、コントロールがオプション1を選択したセグメント化、そして第三は、制御はオプション1を選択したセグメント化:
[0:0, 1:1, 2:1]
しかし、これは私が得るものではありません。私が辞書を印刷するとき、その中の唯一の値は、今押されたボタンのキーとインデックスです。このような何か:
[0:0]
[1:1]
[2:1]
私はそのために、セグメント化された制御1のオプション0、セグメント化されたコントロール2のオプション1、およびセグメント化された制御3のオプション1を選択した場合。ここ
は、参考のために自分のコードである:
import UIKit
class MyTableViewController: UITableViewController {
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 150
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return 3
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath)
let nameLabel: UILabel = {
let label = UILabel()
label.text = "Sample Item"
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
let actionButton = YSSegmentedControl(
frame: CGRect.zero,
titles: [
"Yes",
"No"
])
actionButton.delegate = self
cell.addSubview(nameLabel)
cell.addSubview(actionButton)
actionButton.translatesAutoresizingMaskIntoConstraints = false
cell.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-16-[v0]-160-[v1]-16-|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": nameLabel, "v1": actionButton]));
cell.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": nameLabel]))
cell.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-60-[v0]-60-|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": actionButton]))
actionButton.tag = indexPath.row
cell.backgroundColor = .green
return cell
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cellId")
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
extension MyTableViewController: YSSegmentedControlDelegate {
func segmentedControl(_ segmentedControl: YSSegmentedControl, willPressItemAt index: Int) {
var indexToTag = [Int:Int]()
indexToTag[index] = segmentedControl.tag
// Looking up tag
let tag = indexToTag[index]
print("\(indexToTag)")
}
func segmentedControl(_ segmentedControl: YSSegmentedControl, didPressItemAt index: Int) {
}
}
と同様に自分のアプリケーションの画像:
https://i.stack.imgur.com/ezMUJ.png
のおかげで、 ニック
これを修正するにはどうすればよいですか? –
ありがとう、私は少しそれを考え直していた。機能の範囲が問題でした。私は拡張の外の辞書を宣言し、それはすばらしく働いた。あなたは本当に大きな助けとなりました。私はそれを働かせることができないと心配していました。 –