表示警告ポップアップなどのUI関連の機能をいくつか持っています。画面の中央にアクティビティインジケータを表示したり、カスタムメッセージでUIViewにアニメーションを表示したりできます。
私は複数のviewController(この場合はVC1とVC2)で使いたいので、自分自身を繰り返すことはありません。
最初は、両方のVCで動作する次のコードを持っています。それらの機能を担うBaseVCから継承しています。
VC1はtablelViewが埋め込まれたUIViewController、VC2はcollectionViewが埋め込まれたUIViewControllerです。いくつかの理由によるところが ビューコントローラ間で共有されたUI機能
class VC1: BaseVC {
func viewDidAppear(animated: Bool) {
activityIndicatorBegin()
}
func btnPressed() {
activityIndicatorEnd()
}
}
class VC2: BaseVC {
func viewDidAppear(animated: Bool) {
activityIndicatorBegin()
}
func btnPressed() {
activityIndicatorEnd()
}
}
class BaseVC: UIViewController {
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
var isCustomViewOnScreen = false
func activityIndicatorBegin() {
if activityIndicator.isAnimating() == false {
activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,20,20))
activityIndicator.center = view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge
activityIndicator.color = UIColor.blackColor()
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
}
}
func activityIndicatorEnd() {
if activityIndicator.isAnimating() == true {
activityIndicator.stopAnimating()
activityIndicator.removeFromSuperview()
}
}
func animateACustomViewOnScreen() {
if isCustomViewOnScreen == false {
// Some animation code
}
}
func removeCustomView() {
if isCustomViewOnScreen == true {
// Some removal code
}
}
}
これは、UIViewControllerクラスであるこのBaseVCからはみ出すことができなくなることを意味します。
両方のVCがこれらの機能に到達できるようにするにはどうすればよいですか?
良い答えを、しかし '拡張ActivityIndicatorDisplaying Self:UIViewController'' UIView'がまだ動作していることを表示していたら? –
'.addSubview'はビューコントローラの' .view'プロパティで呼び出されるので、動作しません。 UIViewとUIViewControllerの両方で動作させたい場合は、 'Self:UIViewController'を削除してプロトコルの別のプロパティを定義する必要があります:' var view:UIView {get} ' – ozgur
このソリューションの投票率がさらに高い理由ジェイソンの下の1つ?彼のやり方は、すべてのVCに余分なフラグを導入しません – user125972