2016-08-16 22 views
0

我想在按下特定按鈕之後向視圖添加活動指示器(這是活動指示器視圖)。但是,該按鈕的代碼不在該視圖控制器的swift文件中,而是位於自定義swift文件中,該文件與viewcontroller swift文件「交互」(不確定該術語是否正確?)。我的代碼提示沒有錯誤,但它只是無法正常工作。視圖上沒有顯示activityindicator,屏幕應該停止接受用戶輸入,但它不會。我已經發布的下面的代碼的相關位:查看沒有被添加到Xcode中的頂部視圖控制器?

class CustomCell: UITableViewCell, UITextFieldDelegate { 

    var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView() 

    @IBAction func saveButtonTapped(sender: UIButton) { 
     func topMostController() -> UIViewController { 
      var topController = UIApplication.sharedApplication().keyWindow?.rootViewController 
      while (topController?.presentedViewController != nil) { 
       topController = topController?.presentedViewController 
      } 
      activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50)) 
      activityIndicator.center = topController!.view.center //centers the indicator 
      activityIndicator.hidesWhenStopped = true 
      activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray 
      topController!.view.addSubview(activityIndicator) 
      activityIndicator.startAnimating() 
      UIApplication.sharedApplication().beginIgnoringInteractionEvents() 
      return topController! 
     } 
    } 
} 

如果封閉的量是不正確的,這不是......這只是我搞砸了相關的代碼位的複製和粘貼的問題。有人有任何想法嗎?

+0

嗯......你要顯示在單元格的viewController的指標呢?我對嗎?你爲什麼把這個函數放在動作函數裏面?如果你放在那裏,你不應該打電話嗎? – Tj3n

+0

@ TJ3n你是對的,那就是我想要做的。我有那裏的功能,因爲我不知道如何'獲得'(術語?)頂級視圖控制器添加活動指標到它 –

+0

爲什麼不使用委託,並告訴父VC顯示指標呢? – Tj3n

回答

0

您必須致電bringSubviewToFront將指示燈置於前面。

topController!.view.bringSubviewToFront(activityIndicator) 
+0

這應該在「開始動畫」位代碼之前還是之後?當我想關閉活動指示燈時,是否需要有相反類型的呼叫? –

+1

如果您在之前或之後開始動畫,應該沒有關係。你設置'hidesWhenStopped'爲'true',這樣當你停止'stopAnimation()'時,指示器會自動隱藏。 –

+0

正如@grimfrog所說,這並不重要。如果你設置hidesWhenStopped爲true。 ActivityIndi​​cator會自動爲你做。但是,您需要將它放在正面視圖中,以便它成爲最頂層的視圖或窗口。 –

0
class CustomCell: UITableViewCell, UITextFieldDelegate {\ 
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView() 

@IBAction func saveButtonTapped(sender: UIButton) { 
     let alert = UIAlertController(title: nil, message: "Some Message 
     ", preferredStyle: .Alert) 
     activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50)) 
    activityIndicator.hidesWhenStopped = true 
    alert.view.addSubview(activityIndicator) 
    activityIndicator.startAnimating() 
    let alertWindow = UIWindow(frame: UIScreen.mainScreen().bounds) 
    alertVc = UIViewController() 
    alertWindow.rootViewController = alertVc 
    alertWindow.windowLevel = UIWindowLevelAlert + 1 
    alertWindow.makeKeyAndVisible() 
    alertWindow.rootViewController?.presentViewController(alert, animated: true, completion: handler) 

    } 
} 
+0

您以後會如何致電關閉警報? –

+1

你可以解僱 alertVc增加一個功能.dismissViewControllerAnimated(假,完成:處理程序)? alertVc =零 或解僱警報中添加操作 –

相關問題