[ios] स्विफ्ट चयनकर्ता का उपयोग कैसे करें? चयनकर्ता लगातार `प्रकार का कोई सदस्य नहीं है 'के परिणामस्वरूप



Answers

शायद आपका कोड भिन्न मॉड्यूल में है यदि ऐसा है तो आपको अपने func addNext() सार्वजनिक करना चाहिए:

public func addNext() {
    ...
}
Question

मैं निम्नलिखित कोड के साथ संघर्ष कर रहा हूं:

backgroundTimer = NSTimer.scheduledTimerWithTimeInterval(3, target: gvc, selector: #selector(GameViewController.addNext), userInfo: nil, repeats: true)

मैं # सिलेक्टर काम करने के लिए प्रतीत नहीं कर सकता इस कोड के परिणाम निम्न हैं:

Type 'GameViewController' has no member 'addNext'

यद्यपि सदस्य सही है ... यहाँ पूर्ण कोड है:

class GameViewController: GAITrackedViewController, AVAudioPlayerDelegate  {

    var sceneCanvas: SKSpriteNode?
    override func viewDidLoad() {
       skView.presentScene(WelcomeScene(size: view.bounds.size, gvc: self))
    }

    func createBackground(boundsSize: CGRect, gvc: GameViewController) -> SKSpriteNode {
       addUILabels(gvc)
       return sceneCanvas!
    }

    func addUILabels(gvc: GameViewController) {
        backgroundTimer = NSTimer.scheduledTimerWithTimeInterval(3, target: gvc, selector: #selector(GameViewController.addNext), userInfo: nil, repeats: true)
    }

    public func addNext() {
        let backgroundLabel = SKSpriteNode(imageNamed: "label1.png")
        sceneCanvas!.addChild(backgroundLabel!)
        backgroundLabel?.runAction(SKAction.moveByX(-screenSize.width , y: 0, duration: 12))
    }
}

class WelcomeScene: SKScene {
      init(size: CGSize, gvc: GameViewController){
        super.init ()
        let bounds = CGRect(origin: CGPoint(x: 0,y: 0), size: size)
        sceneCanvas = createBackground(bounds, gvc: gvc)
        self.addChild(sceneCanvas!)
    }
}



मैं इस मुद्दे पर UILongPressGestureRecognizer और स्विफ्ट 3 के साथ चल रहा था

तालिका दृश्य सेल पर एक लंबी प्रेस के लिए मेरे एक्सटेंशन में मेरी विधि थी:

// Long press table view extension
extension MyViewController: UIGestureRecognizerDelegate {

     public func handleLongPress(longPressGesture: UILongPressGestureRecognizer) {

         let p = longPressGesture.location(in: self.tableView)
         let indexPath = self.tableView.indexPathForRow(at: p)

         if indexPath == nil {
             print("Long press on table view, not row.")
         }
         else if (longPressGesture.state == UIGestureRecognizerState.began) {
             print("Long press on row, at \(indexPath!.row)")
         }   
     }
 }

फिर, मेरे विचार में viewDidLoad() :

     // Configure long press on tableviewcell
    let longPressGesture:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(MyViewController.handleLongPress))
    longPressGesture.minimumPressDuration = 1.0 // 1 second press
    longPressGesture.delegate = self
    self.tableView.addGestureRecognizer(longPressGesture)

मेरे लिए, इस चयन को चयनकर्ता के लिए इस वाक्यविन्यास का उपयोग करके तय किया गया था:

action: #selector(MyViewController.handleLongPress)

मैंने किसी भी भाग्य के बिना निम्नलिखित विकल्पों की कोशिश की ये काम नहीं करते हैं :

  • action: #selector(self.handleLongPress)
  • action: #selector(MyViewController.handleLongPress(_:))
  • action: #selector(self.handleLongPress(_:))
  • action: #selector("handleLongPress(_:)")

इसके अतिरिक्त, भले ही मुझे MyViewController.handleLongPress लिए कोई तर्क पारित नहीं होने लगता है, चयनित पंक्ति केवल लंबी प्रेस चयन पर कंसोल पर छापती है:

Long press on row, at 5




Links