私は加算したときよりもステッパのセットを持っています。それらはすべてUICollectionviewにあり、私はデリゲートを使ってそれらとViewControllerの間で値を渡しました。
あなたは割り当てられたポイントの合計数に達すると、別のプレイヤーにポイントを割り当てることになっています。私はポイントの総数に達すると、ステッパーの「半分」を無効にしたい。これどうやってするの? (ステッパー全体を無効にすることなく、ユーザーはポイントを再割り当てしてそのポイントの一部を戻すことができるため)。UIStepperの半分を無効にする
ここでは、これまでに私のコードです:
protocol CollectionVCDelegate: class {
func usedPoints() -> Int
func returnPoints() -> Int
}
class PointAllocationVC: UIViewController, CollectionVCDelegate {
func usedPoints() -> Int {
pointsToAllocate -= 1
totalPointsLabel.text = String(pointsToAllocate)
return pointsToAllocate
}
func returnPoints() -> Int
{
pointsToAllocate += 1
totalPointsLabel.text = String(pointsToAllocate)
return pointsToAllocate
}
var pointsToAllocate: Int = 5 //may change, 5 for example
@IBOutlet weak var ptsAllocView: UIView!
@IBOutlet weak var totalPointsLabel: UILabel!
@IBOutlet weak var addAllButton: UIButton!
@IBOutlet weak var ptAllocCollectionView: UICollectionView!
}
extension PointAllocationVC: UICollectionViewDelegate, UICollectionViewDataSource
{
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return currentPlayers.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let myptCell = collectionView.dequeueReusableCell(withReuseIdentifier: "ptsCell", for: indexPath) as! PtsAllocationViewCell
myptCell.playerNameLabel.text = currentPlayers[indexPath.row]
myptCell.playerScoreLabel.text = "Score: \(currentScore[indexPath.row])"
myptCell.delegate = self
if indexPath.row == 0
{
myptCell.ptsAllocStepper.minimumValue = 0
}
else
{
myptCell.ptsAllocStepper.maximumValue = 0
myptCell.isSelf = false
}
return myptCell
}
}
は今、ここにViewCellsのためのコードです:
import UIKit
class PtsAllocationViewCell: UICollectionViewCell {
var delegate: CollectionVCDelegate? = nil
var isSelf = true
var ptsRemaining: Int = 0
@IBOutlet weak var ptsLabel: UILabel!
@IBOutlet weak var playerNameLabel: UILabel!
@IBOutlet weak var playerScoreLabel: UILabel!
@IBOutlet weak var ptsAllocStepper: UIStepper!
@IBAction func stepperTapped(_ sender: UIStepper) {
let myInt: Int = Int(ptsLabel.text!)!
if delegate != nil
{
if isSelf
{
if myInt > Int(sender.value)
{
ptsRemaining = (delegate?.returnPoints())!
}
else
{
ptsRemaining = (delegate?.usedPoints())!
}
}
else
{
if myInt > Int(sender.value)
{
ptsRemaining = (delegate?.usedPoints())!
}
else
{
ptsRemaining = (delegate?.returnPoints())!
}
}
}
ptsLabel.text = String(Int(sender.value))
}
}
は注:このコードは、これまでのように多くの私は、限り(それがしたいように動作ViewController pointsToAllocateから加減算してラベルとすべてを更新するようにしていますが、今のところ、ユーザーフォームのオーバーポイント使用を防ぐロックはありません(例えば、それぞれ5を置くことができ、最後に合計-15ポイント0未満にならないようにしてください)
と追加した明確にするため、ここでは4の周りになります注意し、絵だ - 6異なる「プレイヤー」:
オプション...あなたはおそらく、「+側を無効にする」ことができない
こんにちはthe4kman、それは私が1つのステッパーしか持っていないと動作します。しかし、私は4 +ステッパーを持っているので、それぞれがポイントの総数の最大値を持っていたら、私は4倍のポイントを割り当てます。唯一の方法は、最大値を「動的に」変更することです。たとえば、1ポイントを使用すると、すべてのステッパーが1ポイントを最大値にします(すでに1つを使用しているものを除く) –
@ dvd.Void私の回答を更新しました。 – the4kman
@ the4kman - ああ...私は、ステッパーが最小値または最大値にある場合、ステッパーが自動的にサイドを無効にすることを認識しませんでした。知っておいてよかった。 – DonMag