防止子视图移动到superview时多次添加到UIView子类

时间:2014-12-19 14:26:27

标签: c# ios uiview xamarin.ios

我想重新使用我的加载叠加层。因此,我的视图控制器类中有一个字段,可以用它实例化一次。

加载叠加层:

public class LoadingOverlay : UIView {
    private UIActivityIndicatorView activitySpinner;
    private bool isShown = false;

    public LoadingOverlay () : base ()
    {
    }

    public override void WillMoveToSuperview (UIView newsuper)
    {
        base.WillMoveToSuperview (newsuper);

        if (newsuper != null) {
            isShown = true;

            activitySpinner = new UIActivityIndicatorView (UIActivityIndicatorViewStyle.WhiteLarge);
            AddSubview (activitySpinner);
            activitySpinner.StartAnimating ();

            activitySpinner.TranslatesAutoresizingMaskIntoConstraints = false;
            this.AddConstraint (NSLayoutConstraint.Create (activitySpinner, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, this, NSLayoutAttribute.CenterX, 1, 0));
            this.AddConstraint (NSLayoutConstraint.Create (activitySpinner, NSLayoutAttribute.CenterY, NSLayoutRelation.Equal, this, NSLayoutAttribute.CenterY, 1, 0));
        }
    }

    public void Hide ()
    {
        if (isShown) {
            RemoveFromSuperview ();
        }
    }

我将以这种方式将其添加到视图层次结构中:

viewShowingLoadingOverlay.InsertSubviewBelow(loadingOverlay, AppDelegate.navigationController.NavigationBar);

当我想删除它时,我调用 hide()方法:

loading.Hide ();

使用此方法,微调器会多次添加(对于每个InsertSubView)。为每个调用创建 LoadingOverlay 的新实例不会显示此问题。现在很明显,AddSubView每次 LoadingOverlay 移动到父级时都会添加微调器。我的代码在C#中,但您也可以提供Objective-C解决方案。

如何编写 LoadingOverlay 类,以便只添加一次微调器?

0 个答案:

没有答案