Я использовал код от @Michael Shang и имел все виды противоречивого поведения при отображении HUD. Оказывается, использование последнего окна ненадежно, так как клавиатура iOS может просто его скрыть. Так что в большинстве случаев вы должны получить окно, используя AppDelegate, как упомянуто @David Lawson.
Вот как в Swift:
let window = UIApplication.sharedApplication().delegate!.window!!
let hud = MBProgressHUD.showHUDAddedTo(window, animated: true)
Однако, с учетом вышеизложенного ваш HUD будет отображаться за клавиатурой iOS (если они перекрываются). Если вам нужен HUD для наложения клавиатуры, используйте последний метод окна.
В моем случае я показываю HUD, затем вызываю resignFirstResponder()
, немедленно скрывая окно, в которое был добавлен HUD. Так что это то, о чем нужно знать, единственное окно, которое гарантированно остается рядом, - это первое.
Я закончил тем, что создал метод, который при необходимости мог бы добавить HUD над клавиатурой:
func createHUD(size: CGSize, overKeyboard: Bool = false) -> MBProgressHUD {
let window = overKeyboard ? UIApplication.sharedApplication().windows.last!
: UIApplication.sharedApplication().delegate!.window!!
let hud = MBProgressHUD.showHUDAddedTo(window, animated: true)
hud.minSize = size
hud.bezelView.style = .SolidColor
hud.bezelView.color = UIColor(white: 0, alpha: 0.8)
return hud
}
Определение шаблона (файл cpp в вашем коде) должно быть включено до создания экземпляра данного класса шаблона, поэтому вам нужно либо включить определения функций в заголовок, либо # включить cpp перед использованием класса (или выполните явные экземпляры, если их количество ограничено).
Работает включение файла cpp, содержащего реализации функций класса шаблона. Однако, ИМХО, это странно и неудобно. Наверняка должен быть более изящный способ сделать это?
Если у вас есть только несколько разных экземпляров для создания и вы знаете их заранее, вы можете использовать «явное создание экземпляров»
Это работает примерно так:
Вверху gene.cpp добавьте следующие строки
template class Gene<int>;
template class Gene<float>;