स्विफ्टब्यूव्यू को स्विफ्ट करें और इसे हटा दें


82

मैं उप दृश्य जोड़ना चाहता हूं और एक टैप से निकालना चाहता हूं। यह मेरा कोड है:

/ * सबव्यू जोड़ने के लिए * /

var testView: UIView = UIView(frame: CGRectMake(0, 0, 320, 568))
testView.backgroundColor = UIColor.blueColor()
testView.alpha = 0.5
testView.tag = 100
super.view.userInteractionEnabled = false
self.view.userInteractionEnabled = true
self.view.addSubview(testView)

/ * सबव्यू हटाने के लिए * /

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    let touch = touches.anyObject() as UITouch
    let point = touch.locationInView(self.view)

    if(testView.tag==100){
        println("Tag 100")
        testView.removeFromSuperview()
    }
    else{
        println("tag not found")
    }

}

लेकिन इसे हटाने से काम नहीं चल रहा है कोई मेरी मदद कर सकता है? धन्यवाद!


"काम नहीं करने" का क्या मतलब है? जोड़ने? हटाने? त्रुटियां? अधिक जानकारी शामिल करने के लिए कृपया अपने प्रश्न को संपादित करें।
ABMagil

1
testView टैग 100 के साथ दृश्य है, न कि self.view, इसलिए आपका यदि कथन कभी निष्पादित नहीं होता है।
rdelmar

उत्तर के लिए धन्यवाद। यह अब संपादित किया गया है
दासोगा

जवाबों:


99

मदद के लिए शुक्रिया। यह समाधान है: मैंने सबव्यू बनाया और मैं इसे हटाने के लिए एक इशारा जोड़ता हूं

@IBAction func infoView(sender: UIButton) {
    var testView: UIView = UIView(frame: CGRectMake(0, 0, 320, 568))
    testView.backgroundColor = UIColor.blueColor()
    testView.alpha = 0.5
    testView.tag = 100
    testView.userInteractionEnabled = true
    self.view.addSubview(testView)

    let aSelector : Selector = "removeSubview"
    let tapGesture = UITapGestureRecognizer(target:self, action: aSelector)
    testView.addGestureRecognizer(tapGesture)
}

func removeSubview(){
    println("Start remove sibview")
    if let viewWithTag = self.view.viewWithTag(100) {
        viewWithTag.removeFromSuperview()
    }else{
        println("No!")
    }
}

अपडेट करें:

स्विफ्ट 3+

@IBAction func infoView(sender: UIButton) {
    let testView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 568))
    testView.backgroundColor = .blue
    testView.alpha = 0.5
    testView.tag = 100
    testView.isUserInteractionEnabled = true
    self.view.addSubview(testView)

    let aSelector : Selector = #selector(GasMapViewController.removeSubview)
    let tapGesture = UITapGestureRecognizer(target:self, action: aSelector)
    testView.addGestureRecognizer(tapGesture)
}

func removeSubview(){
    print("Start remove sibview")
    if let viewWithTag = self.view.viewWithTag(100) {
        viewWithTag.removeFromSuperview()
    }else{
        print("No!")
    }
}

75

viewWithTagदिए गए दृश्य को देखने के लिए आपको फ़ंक्शन का उपयोग करना होगा tag

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    let touch = touches.anyObject() as UITouch
    let point = touch.locationInView(self.view)

    if let viewWithTag = self.view.viewWithTag(100) {
        print("Tag 100")
        viewWithTag.removeFromSuperview()
    } else {
        print("tag not found")
    }
}

धन्यवाद! वास्तव में इससे मेरी समस्या हल हो गई। लेकिन डी सुपर व्यू के साथ सहभागिता यह अक्षम नहीं है। मैं सुपर दृश्य के साथ सहभागिता को कैसे अक्षम कर सकता हूं?
दरोगा

मुझे समझ नहीं आया। पर्यवेक्षण के साथ क्या बातचीत?
राकेशबस २ r

मेरे पास पहले दृश्य में एक टैप जेस्चर है, एक बटन के बाद मैं एक सबव्यू जोड़ता हूं, लेकिन सिर्फ एक सूचना दृश्य है, इसलिए, एक टैप एआई इसे हटाना चाहता है। अब यह रिमूव टैप पर काम कर रहा है। लेकिन पहले दृश्य में मुझे एक ही नल मिलता है, मुझे उस नल को निष्क्रिय करना होगा ... धन्यवाद !!
दरोगा

सूचना दृश्य को हटाने के लिए आप कहां टैप करना चाहते हैं? क्या आप उस दृश्य को हटाना चाहते हैं जब सूचना दृश्य अंदर और बाहर नहीं पर टैप किया गया हो?
राकेशबस

हां, जब उपयोगकर्ता सूचना दृश्य (दूसरा दृश्य) पर टैप करता है, तो मैं उस दृश्य (दूसरा दृश्य) को हटाना चाहता हूं और पहले दृश्य को फिर से दिखाता हूं ।
दासोगा २ Jan'१५ को १

2

मान लें कि आपके पास आउटलेट या प्रोग्रामेटिक कोड के माध्यम से इसकी पहुंच है, तो आप इसे अपने विचार fooऔर removeFromSuperviewविधि को संदर्भित करके निकाल सकते हैं

foo.removeFromSuperview()

0

मैंने अपने कस्टम संग्रह दृश्य के अंदर एक दृश्य देखा है, और उस दृश्य पर एक ग्राफ एम्बेड कर रहा हूं। इसे रीफ्रेश करने के लिए, मुझे यह देखना होगा कि क्या उस दृश्य पर पहले से ही कोई ग्राफ रखा गया है, उसे हटा दें और फिर नया लागू करें। यहाँ समाधान है

cell.cellView.addSubview(graph)
graph.tag = 10

अब, कोड ब्लॉक में जहां आप इसे हटाना चाहते हैं (अपने मामले में इशारा

if let removable = cell.cellView.viewWithTag(10){
   removable.removeFromSuperview()
}

इसे फिर से एम्बेड करने के लिए

cell.cellView.addSubview(graph)
graph.tag = 10

-9

XCode 8 और Swift 3 का उपयोग करके इस कोड का परीक्षण किया

कस्टम दृश्य को SuperView उपयोग में जोड़ने के लिए:

self.view.addSubview(myView)

Superview उपयोग से कस्टम दृश्य निकालने के लिए:

self.view.willRemoveSubview(myView)


8
willRemoveSubview पर्यवेक्षण से सबव्यू को नहीं हटाता है। यह केवल यह बताता है कि सबव्यू कब निकालने वाला है।
मुरात यासर

3
पर्यवेक्षण दृश्य से कस्टम दृश्य को हटाने के लिए myView.removeFromSuperview () का उपयोग करना चाहिए
यारोस्लाव बाई

1
willRemoveSubview पर्यवेक्षण से सबव्यू को नहीं हटाता है।
1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.