UITableViewControllerにUIActivityIndicatorViewを表示させる

ビューコントローラ内で普通に

self.view.addSubview(indicator)

などとやってると、self.viewがUITableViewなので、テーブルの中にインジケーターが埋め込まれたように見えてしまう。 表示位置によってはインジケーターがセクションの下に潜り込んでしまってイケてない感じ。

テーブルの上に表示するにはself.viewではなく、self.navigationController?.viewに対して追加してやると良い。

var indicator:UIActivityIndicatorView?

override func viewDidLoad() {
    super.viewDidLoad()
    ...
    let indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
    let screen = self.view.bounds.size
    //中央に表示
    indicator.center = CGPointMake(screen.width / 2, screen.height / 2 )
    self.indicator = indicator
    self.navigationController?.view.addSubview(indicator)
    ....
}
func hoge() {
    self.indicator?.startAnimating()
    self.view.userInteractionEnabled = false //処理中はテーブルをタップできないようにする。
    ...(長い処理)...
    self?.indicator?.stopAnimating()
    self?.view.userInteractionEnabled = true    
}