ios - 如何在其余 api 从服务器获取数据时显示 UIActivityIndi​​catorView

标签 ios xamarin xamarin.ios

我想在从服务器接收数据时显示 UIActivityIndi​​catorView。我试过了,但它不可见:

public partial class MyFirst: UIViewController
    {
        UIActivityIndicatorView spinner;

        public MyFirst(IntPtr handle) : base(handle)
        {
        }

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

              picker.ValueChanged += (sender, e) =>
             {
                 loadDetails(picker.SelectedValueId);
             };

            spinner = new UIActivityIndicatorView
            {
                Frame = new CGRect(0, 0, 60, 60),
                Color = UIColor.Black
            };

            spinner.Center = new CGPoint(View.Bounds.Width / 2, 
            View.Bounds.Height / 2);
            View.AddSubview(spinner);

       }

      public void loadDetails(string userId)
      {
          spinner.StartAnimating();

          var client = new RestClient("my web service URL");
          var request = new RestRequest(Method.POST);
          request.AddParameter("userid", userId);

          IRestResponse response = client.Execute(request);
          var content = response.Content;

          var deserializedObject = JsonConvert.DeserializeObject<FleetList>(content);
          var fleets = deserializedObject.ownersdara;

          if (fleets.Count > 0)
          {
               spinner.StopAnimating();
               tableView.Source = new tableSource(fleets .ToArray());
               tableView.ReloadData();
          }               
     }
}

这里我使用了 restsharp 来调用网络服务。现在,当我更改选择器的值时,它将调用 loadDetails 函数。在这个函数中,我写了 spinner.StartAnimating(); 但它没有显示。

我在从服务器获取所有数据后绑定(bind) TableView 数据源。

当接收数据时调用其余 API 并在获取所有数据后再次隐藏它时,如何显示 UIActivityIndi​​catorView

最佳答案

我在viewWillAppear(_animated: Bool)上调用了api,因为我想在屏幕出现时获取数据。我在这里从 firebase 获取数据。 从数据库中获取数据时始终使用完成处理程序,这将在显示微调器的同时在后台获取数据,一旦获取数据,它就会显示给用户。

   //Start your spinner before calling api
    self.startAnimating()
    var ref: DatabaseReference!
    ref = Database.database().reference(fromURL: kFirebaseLink)
    ref.observe(DataEventType.value, with: { (snapshot) in
        print("data fetched of : \(snapshot)")
        if let dict = snapshot.value as? [String : AnyObject] {
            //fill array from the data fetched from database

            //Stop your spinner here when your data is fetched.
            self.stopAnimating()
            if self.array.count > 0 {
                 // Data fetced from database. populate table
                 self.tblView.reloadData()
            }else{
                 // there are no data in Database.

            }
        }

    })

关于ios - 如何在其余 api 从服务器获取数据时显示 UIActivityIndi​​catorView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47888777/

相关文章:

android - Xamarin android 发现重复的托管类型

c# - 如何知道执行代码的当前操作系统/平台(Android/iOS)

c# - 如何得到 x :name of element in code behind/XAML

xaml - 如何只为特定平台设置 OnPlatform?

C#:无法将类型为 'System.Int64' 的对象转换为类型 'System.Int32'

encryption - 使用 Xamarin 保护跨平台存储选项

ios - 从 Appstore 更新后运行 iOS 应用程序会发生什么情况?

ios - 从 "SecTrustCopyPublicKey"调用收到的值的含义

iphone - 如何更改 XCode xib 中的堆叠顺序或对象?

iphone - 如何在 iPhone 中以 mp3 格式录制声音