2016-06-10 4 views
5

में दबाया गया है तो मैं सरल कार्रवाई कर रहा हूं, मैं तेजी से सीखने की प्रक्रिया में हूं। मैं जानना चाहता हूं कि बटन दबाए जाने पर प्रोग्राम को प्रोग्रामिक रूप से कैसे कॉल करना है .... मैंने यह कोशिश की, लेकिन प्रोग्राम लॉन्च होने पर फ़ंक्शन निष्पादित किया जाता है, न कि जब मैं बटन दबाता हूं ... क्या आप कृपया मेरी मदद कर सकते हैं इसे ठीक करने के .. इस परीक्षण एप्लिकेशनयदि एनएसबटन को

// 
// ViewController.swift 
// hjkhjkjh 
// 
// Created by iznogoud on 14/05/16. 
// Copyright © 2016 iznogoud. All rights reserved. 
// 

import Cocoa 


class ViewController: NSViewController { 

    func printSomething() { 
    print("Hello") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let myButtonRect = CGRect(x: 10, y: 10, width: 100, height: 10) 
    let myButton = NSButton(frame: myButtonRect) 
    view.addSubview(myButton) 
    myButton.target = self 
    myButton.action = Selector(printSomething()) 


    // Do any additional setup after loading the view. 
} 

override var representedObject: AnyObject? { 
    didSet { 
    // Update the view, if already loaded. 
    } 
} 


} 

उत्तर

8

समस्या रास्ते में निहित है के लिए पूरी ViewController.swift नीचे आप धन्यवाद चयनकर्ताओं जोड़ने के लिए अपनी selector

myButton.action = Selector(printSomething()) 

वाक्य रचना जोड़ने थोड़ा विचित्र है , आप इसे फ़ंक्शन के नाम से एक स्ट्रिंग देते हैं, इसलिए आपके मामले में आपको लिखना चाहिए:

myButton.action = Selector("printSomething") 

आपको अपने कंसोल में Hello के साथ पुरस्कृत करना चाहिए।

और शायद इसलिए है क्योंकि वाक्य रचना लोगों की समस्याओं को यह स्विफ्ट 2.2 में बदल गया था खड़ी कर रहा है, इसलिए अब आप लिखते हैं:

myButton.action = #selector(ViewController.printSomething) 

बजाय। इसका मतलब यह है कि संकलक आपको इन त्रुटियों को जल्दी पकड़ने में मदद कर सकता है, जो मुझे लगता है कि एक महान कदम है। आप स्विफ्ट 2.2 here

तो के लिए रिलीज नोट्स में इसके बारे में अधिक पढ़ सकते हैं ... यहाँ अपने पूरे उदाहरण है:

import Cocoa 

class ViewController: NSViewController { 

    func printSomething() { 
     print("Hello") 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
     let myButtonRect = CGRect(x: 10, y: 10, width: 100, height: 10) 
     let myButton = NSButton(frame: myButtonRect) 
     view.addSubview(myButton) 

     myButton.target = self 
     myButton.action = #selector(ViewController.printSomething) 
    } 

    override var representedObject: AnyObject? { 
     didSet { 
     // Update the view, if already loaded. 
     } 
    } 
} 

आशा है कि आप में मदद करता है।

+1

धन्यवाद, यह काम करता है, और आपके उत्कृष्ट स्पष्टीकरण के लिए धन्यवाद !! – iznogoud

+1

आपका स्वागत है, खुशी है कि आप इसे काम कर रहे हैं। – pbodsk

+0

मुझे कई बटनों के लिए क्या करना चाहिए और उस समय जब नया बटन उस समय बनाता है तो y स्थिति के पिछले बटन फ्रेम भी परिवर्तन होंगे। –

संबंधित मुद्दे