セグメント化されたコントロール内の別の項目が選択されるたびにビューコントローラと通信するカスタムクラスのセグメント化コントロールがあります。 View Controllerにデータを渡すことができます。関数が呼び出されたときに、関数の項目がnilになるSwift 3
@IBDesignable class SegmentedControlLeft: UIControl {
var selectedIndex: Int = 0 {
didSet {
displayNewSelectedIndex()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let messagesViewController: MessagesViewController = storyboard.instantiateViewController(withIdentifier: "PurpleVC") as! MessagesViewController
messagesViewController.animateViews(selectedIndex: selectedIndex)
}
}
...some more code
}
ただし、渡された変数が更新されるたびに基本的なロジックを使用しようとすると、「animateViews」関数内のすべての項目が明らかにnilになります。私は悪名高い "予期せぬ発見なし"のエラーを受け取ります。これは、私が渡している変数を使用しようとする場合にのみ発生します。
import UIKit
class MessagesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
@IBOutlet weak var messageTableView: UITableView!
@IBOutlet weak var boostCollectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
...all cells, delegates, and datasource are registered and setup in here.
}
func animateViews(selectedIndex: Int) {
if selectedIndex == 0 {
print("LEFT") // prints as expected
self.messagesTableView.isHidden = false // unexpected found nil error on each of these items.
self.boostCollectionView.isHidden = true
} else if selectedIndex == 1 {
print("RIGHT") // prints correctly when updated
self.messageTableView.isHidden = true
self.boostCollectionView.isHidden = false
}
}
}
私はあまりにも長い間、これで遊んでてきた、はどのように私はanimateViewsのビューは、私がセグメント化されたコントロールから渡している変数を使用して非表示と再表示するために機能するのですか?
私はここにはいないと思われる驚くほど簡単な修正がありますが、これまでの視線を得ることに感謝します。ありがとうございました!
なぜ誰かがこの質問に投票しませんでしたか? –