Search code examples
xcodecocoabrowserswift5ibaction

Only instance methods can be declared @IBAction | XCODE ERROR | Swift 5


Here's my code do not suggest to remove IBAction I'm a beginner making a browser. I'm also pretty new to this program:

import Cocoa
import WebKit
class ViewController: NSViewController, WKNavigationDelegate {



@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
    super.viewDidLoad()
    webView.navigationDelegate = self
    // Do any additional setup after loading the view.
}

override var representedObject: Any? {
    didSet {
    
    }
}




@IBAction func didEnterKeyTapped( sender: NSTextField){
    let urlString = sender.stringValue
guard let url  = URL(string: urlString) else {return}
    let urlRequest = URLRequest(url: url)
    webView.load(urlRequest)
    
    
    @IBAction func didnavigationButtonTapped ( sender: NSSegmentedControl){
        if sender.selectedSegment == 0 {
            webView.goBack()
        }else {
            webView.Forward()
        }
        
        
        
        
    }





func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
    let currentUrl = webView.url?.absoluteString ?? ""
    guard let windowController = view.window?.windowController as? WindowController else {return}
    let textField = windowController.urlTextField
    textField?.stringValue = currentUrl
}

}

}


Solution

  • You declared the @IBActions outside of the ViewController class. An IBAction must be a member of a class. Move the IBActions inside the class to fix the compiler error.

    Another problem in your code is you declared the didNavigationButtonTapped IBAction inside the didEnterKeyTapped IBAction. The two IBActions should be separate functions, such as the following:

    @IBAction func didEnterKeyTapped( sender: NSTextField){
        let urlString = sender.stringValue
        
        guard let url  = URL(string: urlString) else {return}
                
        let urlRequest = URLRequest(url: url)
        webView.load(urlRequest)
    }
    
    @IBAction func didnavigationButtonTapped ( sender: NSSegmentedControl) {
        if sender.selectedSegment == 0 {
            webView.goBack()
        }else {
            webView.Forward()
        }
    }