Оставьте свой веб-сайт внутри UINavigationView
, а затем установите его headerView
как UITextField
. Что-то вроде этого:
class WebsiteViewController: UIViewController, UITextFieldDelegate {
var addressField: UITextField? = nil
override public func viewDidLoad() {
super.viewDidLoad()
addressField = ({
let field = UITextField()
field.autocorrectionType = UITextAutocorrectionType.No
field.delegate = self
field.addTarget(self, action: "addressChanged:", forControlEvents: .EditingChanged)
field.addTarget(self, action: "addressEditEnded:", forControlEvents: .EditingDidEnd)
field.sizeToFit()
return field
})()
}
override public func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.titleView = addressField
}
@IBAction func addressChanged(sender: UITextField) {
if let newString = addressField?.text where newString != searchString && newString.characters.count != 1 {
// do any filtering you might want to
}
}
@IBAction func addressEditEnded(sender: UITextField) {
// trigger the page load
}
}
Это должно охватывать предметы первой необходимости.
Привет, Алекс, спасибо большое. Я работаю над этим. Один вопрос, два @IBAction func, addressChanged и адрес EditEnded, где я должен подключаться в Storyboard? Благодаря! – Mike
Вам не нужно связывать их ни с чем, так как мы добавляем их в качестве целей вручную при создании addressField. Это просто конвенция, согласно которой любая функция, используемая в шаблоне Target/Action, обозначается как «@ IBAction», независимо от того, на самом деле она подключена с помощью nib/раскадровки или нет. Не стесняйтесь оставлять '@ IBAction', если вы обнаружите, что это более запутанно, чем полезно. –