2017-01-04 9 views
0

ABの2つのクラスがあります。Bの属性はAです。条件に応じた自動有効化ボタン

AはViewControllerで、ボタン(but)が含まれています。

Bには、配列(arr)が含まれています。

B.arrは空であり、B.arrがもう空でない場合に有効になります。A.butを無効にします。

ボタンがこれを追跡し、自動的に有効/無効を切り替える良い方法はありますか?


私が最初にA.but無効に設定し、(必要であれば)それを更新B.arr didSetに、私は

答えて

0

一つのアプローチを使用することができ、回避策のように見えない解決策を探しています可能性がありDelegateパターン。これにより、Arrayに何かが追加または削除されたときに呼び出されるデリゲートメソッドが公開されます。 ViewControllerは、Delegateプロトコルに準拠し、ボタンの有効な状態を管理できます。

例:

MyArrayDelegate.swift

protocol MyArrayDelegate: class { 
    func didChange(_ myArray: MyArray) 
} 

MyArray.swift

class MyArray { 
    weak var delegate: MyArrayDelegate? 

    private var _myArray = [Int]() 
    var myArray: [Int] { 
     return _myArray 
    } 

    func append(_ element: Int) { 
     _myArray.append(element) 
     delegate?.didChange(self) 
    } 

    func remove(at index: Int) -> Int { 
     let element = _myArray.remove(at: index) 
     delegate?.didChange(self) 

     return element 
    } 
} 

append(_:)およびremove(at:)は、標準のArrayメソッドをラップするだけです。

append(_:)またはremove(at:)方法がインスタンスで呼び出されるたびViewController.swift

class ViewController: UIViewController, MyArrayDelegate { 

    @IBOutlet weak var myButton: UIButton! 

    private var myArray = MyArray() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     myArray.delegate = self 
     myButton.isEnabled = false 
    } 

    @IBAction func buttonTapped(_ sender: Any) { 
     print(myArray.myArray.count) 
    } 

    @IBAction func addButtonTapped(_ sender: Any) { 
     myArray.append(1) 
    } 

    @IBAction func removeButtonTapped(_ sender: Any) { 
     if myArray.myArray.count > 0 { 
      _ = myArray.remove(at: 0) 
     } 
    } 

    func didChange(_ myArray: MyArray) { 
     if myArray.myArray.count > 0 { 
      myButton.isEnabled = true 
     } else { 
      myButton.isEnabled = false 
     } 
    } 
} 

didChange(_:)が呼び出されます。

例ユーザーインタフェース

enter image description here

当初は "ボタン" が無効です。 「+」をタップすると、有効になります。 「+」をタップし続けると、「ボタン」は有効のままです。 「削除」をタップすると、1つの要素がアレイから削除されます。すべての要素が配列から削除された場合、 "Button"は無効になります。

関連する問題