この関数を 2 つの場所から呼び出せるようにしたかったのです。テキスト フィールドの編集が終了したら、webView
a に何もないときに新しい を追加したいのとstackView
、 a を使用しbarButtonItem
てそうできるようにしたいのです。
2 つの問題があります。バー ボタンがこの関数を呼び出すと、パラメーター「url」がオブジェクト type になりますUIBarButtonItem
。から呼び出されるとtextFieldShouldReturn
、適切に として入りますNSURL
。ユーザーがアドレス フィールドに何も入力せずに Enter キーを押すと、空白NSURL
が入り、デフォルト値は使用されません。(そうであってほしい)
textfieldShouldReturn
空白がデフォルトをトリガーするように、関数からの呼び出しはどのように見えるべきですか?
関数またはボタンのいずれかが関数を呼び出すという事実をどのように処理すればよいですか?また、名前付きパラメーター「url」が「sender」と推測されるものになるのはなぜですか?
override func viewDidLoad() {
super.viewDidLoad()
setDefaultTitle()
let add = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: #selector(ViewController.addWebView))
let delete = UIBarButtonItem(barButtonSystemItem: .Trash, target: self, action: #selector(ViewController.deleteWebView))
navigationItem.rightBarButtonItems = [delete, add]
}
func addWebView(url: NSURL = NSURL(string: "https://www.google.com")!) {
let webView = UIWebView()
webView.delegate = self
stackView .addArrangedSubview(webView)
webView.loadRequest(NSURLRequest(URL: url))
webView.layer.borderColor = UIColor.blueColor().CGColor
selectWebView(webView)
let recognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.webViewTapped))
recognizer.delegate = self
webView.addGestureRecognizer(recognizer)
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
if let webView = activeWebView, address = addressBar.text {
if let url = NSURL(string: address) {
webView.loadRequest(NSURLRequest(URL: url))
}
} else if stackView.arrangedSubviews.count == 0 {
let address = NSURL(string: addressBar.text!)!
addWebView(address)
}
textField.resignFirstResponder()
return true
}