2016-07-06 21 views
1

我已经越来越错误“类型‘的ViewController’的值没有任何构件‘动作’”夫特2.2 - 类型的值的ViewController没有构件动作

(动作是所述函数)

这里是我使用的功能和手势识别器

let uilpgr = UILongPressGestureRecognizer(target: self, action: #selector(self.action)) 

    uilpgr.minimumPressDuration = 2 

    Map.addGestureRecognizer(uilpgr) 

    func action(gestureRecogniser: UIGestureRecognizer) { 

     print("Gesture Recognised") 


    } 

let uilpgr = UILongPressGestureRecognizer(target: self, action: #selector(self.action))

这是在self.action

发生错误的代码

我在做什么错,我该如何解决?

+0

'FUNC动作(gestureRecogniser:UIGestureRecognizer,动作){'在Swift中不是有效的函数头。目前还不清楚你在哪里宣布该功能。显示包含'let uilpgr = ...'这一行的整个方法。 – OOPer

+0

@OOPer,我更新了代码,它是'func action(gestureRecogniser:UIGestureRecogniser){'但它仍然出现相同的错误。请帮忙! –

+0

@Sausage调制矩阵,我没有创建ViewController,因为它是在我制作项目时制作的。 ViewController的默认设置为。所以我不认为这是问题。 –

回答

1

您的方法action在创建手势识别器的同一方法中进行本地声明。

为了解决这个问题,你的action方法在当前方法之外。所以这是它自己的方法ViewController而不是在任何其他函数中。

+0

这提出了错误,“值类型'ViewControlller'没有成员的'行动'”,但它仍然显示在同一行代码警告“没有方法与Objective-C选择器'行动'”宣布“。我在这里做什么? –

+0

我会将此标记为正确的答案,因为它运行程序,但我仍然想知道有关警告。谢谢。 –

1

这是工作在Xcode中8:

override func viewDidLoad() { 

    super.viewDidLoad() 

    let uilpgr = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.action)) 
} 

func action(gesture:UIGestureRecognizer){ 

    print("receives gesture") 

} 
0

接受布雷克洛克利的回答是斯威夫特4之前的权利;然而,在4斯威夫特,需要的代码将被改变,以便正确编译(添加@objc标记到目标函数)如下:

override func viewDidLoad() { 

    super.viewDidLoad() 

    let uilpgr = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.action)) 
} 

@objc func action(gesture:UIGestureRecognizer){ 

    print("receives gesture") 

} 
相关问题