Я пытаюсь анимировать inputAccessoryView - для контекста прецедент - это когда поля проверяются, кнопка должна появиться.Как анимировать inputAccessoryView
Сначала я попытался установить центральную точку, чтобы кнопка была ниже клавиатуры, а затем анимировала ее, но это не сработало. Я также попытался изменить фрейм, не повезло.
Я тогда нашел this SO post, похоже, описал, чего я хотел достичь, решив использовать UIView и добавив кнопку в качестве подсмотра. Однако это тоже не работает; на самом деле любые Изменения в виде/кнопку после ее появления не отражаются.
Я прочитал Apple docs на представлениях ввода, и в нем явно не указано, что вы не можете вносить изменения в представление после его инициализации, поэтому я не уверен, что я просто делаю что-то неправильно или это недокументировано.
Вот соответствующие части моего кода:
override var inputAccessoryView: UIView! {
get {
let height:CGFloat = 50
let view = UIView(frame: CGRectMake(0, 0, CGRectGetWidth(self.view.frame), height))
view.backgroundColor = UIColor.redColor()
view.addSubview(inputButton)
return view
}
}
var inputButton: UIButton {
let height:CGFloat = 50
let button = UIButton(frame: CGRectMake(0, height, CGRectGetWidth(self.view.frame), 0))
button.backgroundColor = UIColor.whiteColor()
button.setTitle("Submit", forState: .Normal)
button.addTarget(self, action: "didPressButton:", forControlEvents: .TouchUpInside)
button.center = CGPointMake(CGRectGetMidX(self.view.frame), 50)
return button
}
// Called on text field change
@IBAction func textFieldValueChanged(sender: AnyObject) {
inputButton.setTitle("Testing Change!", forState: .Normal)
textField.reloadInputViews()
UIView.animateWithDuration(1,
delay: 0,
options: .CurveEaseOut,
animations: {
self.inputButton.center = CGPointMake(CGRectGetMidX(self.view.frame), -50)
// self.inputButton.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.frame), -50)
self.view.setNeedsLayout()
}, completion: nil)
}
Вы заметите, что я попробовал и установке титра и фактически анимировать. Я также использовал setNeedsLayout
и даже нашел ссылку в документах Apple на метод с именем reloadInputViews
(link), который должен обновлять пользовательский вид ввода при вызове первого ответчика. Но ничто из этого не работает.
Я видел это в действии в приложении Thumbtack. Так или есть способ заставить это работать, или они не используют inputAccessoryViews, которые выглядели бы ужасно взломанными.
Любая помощь приветствуется!