我想重新使用我的加载叠加层。因此,我的视图控制器类中有一个字段,可以用它实例化一次。
加载叠加层:
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 类,以便只添加一次微调器?