2015-10-29 6 views
6

का चयन संभाल लें मैंने एक कस्टम कॉलऑट व्यू बनाया है, जो ठीक काम करने लगते हैं। हालांकि मुझे कस्टम कॉल पर नल को संभालने में समस्या है। जब इसे चुना जाता है तो मैं एक विशिष्ट दृश्य नियंत्रक को धक्का देना चाहता हूं। इसे कैसे प्राप्त किया जा सकता है?कस्टम CallOutView स्विफ्ट

नीचे मैंने अपना FBSingleClusterView जोड़ा है, जो कस्टम एमकेएनोटेशन व्यू और bubbleView है जो कस्टम कॉलऑट व्यू है। इसके अलावा मेरे पास एक नक्शा दृश्य के साथ एक नियंत्रक है।

FBSingleClusterView चर

private var hitOutside:Bool = true 


var preventDeselection:Bool { 
    return !hitOutside 
} 

FBSingleClusterView तरीकों

override func setSelected(selected: Bool, animated: Bool) { 

    let calloutViewAdded = bubbleView?.superview != nil 

    if (selected || !selected && hitOutside) { 
     super.setSelected(selected, animated: animated) 
    } 

    self.superview?.bringSubviewToFront(self) 

    if (bubbleView == nil) { 
     bubbleView = BubbleView() 
    } 

    if (self.selected && !calloutViewAdded) { 
     bubbleView?.clipsToBounds = true 
     bubbleView?.layer.masksToBounds = true 
     self.addSubview(bubbleView!) 

     let discView = UIImageView() 
     discView.contentMode = UIViewContentMode.Center 
     discView.image = UIImage() 
     discView.image = UIImage(named: "Disclosure") 

     bubbleView?.contentView.addSubview(discView) 


     let nameLabel = UILabel() 
     nameLabel.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
     nameLabel.font = UIFont.systemFontOfSize(10) 
     nameLabel.textColor = UIColor.whiteColor() 
     nameLabel.text = companyString?.uppercaseString 


     bubbleView?.addSubview(nameLabel) 

     discView.snp_makeConstraints { (make) -> Void in 
      make.top.equalTo(bubbleView!).offset(0) 
      make.height.equalTo(30) 
      make.width.equalTo(20) 
      make.right.equalTo(bubbleView!).offset(0) 

     } 

     nameLabel.snp_makeConstraints { (make) -> Void in 
      make.top.equalTo(bubbleView!).offset(0) 
      make.left.equalTo(bubbleView!).offset(10) 
      make.height.equalTo(30) 
      make.right.equalTo(bubbleView!).offset(-20) 
     } 

     let nameLabelWidth = nameLabel.requiredWidth(companyString!.uppercaseString, font: UIFont.systemFontOfSize(10)) + 35 

     let bubbleHeight = 35 as CGFloat 

     bubbleView?.frame = CGRectMake((self.frame.width/2)-(nameLabelWidth/2), -bubbleHeight-2, nameLabelWidth, bubbleHeight) 

    } 

    if (!self.selected) { 
     bubbleView?.removeFromSuperview() 
    } 



} 

override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? { 
    var hitView = super.hitTest(point, withEvent: event) 

    if let callout = bubbleView { 
     if (hitView == nil && self.selected) { 
      hitView = callout.hitTest(point, withEvent: event) 
     } 
    } 

    hitOutside = hitView == nil 

    return hitView; 
} 

bubbleView तरीकों

override public func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? { 
     let viewPoint = superview?.convertPoint(point, toView: self) ?? point 

     //  let isInsideView = pointInside(viewPoint, withEvent: event) 

     let view = super.hitTest(viewPoint, withEvent: event) 

     return view 
    } 

    override public func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool { 
     return CGRectContainsPoint(bounds, point) 
    } 



} 

उत्तर

3

क्या आपने instantiateViewControllerWithIdentifier का उपयोग करने का प्रयास किया है? viewDidLoad में या किसी भी अन्य विधि में, जिसे आप ट्रिगर करना चाहते हैं और एक नया दृश्य नियंत्रक को दबाकर बटन को टैप करते समय इसे ट्रिगर कर सकते हैं।

सबसे पहले, अपने स्टोरीबोर्ड में दृश्य नियंत्रक के लिए "स्टोरीबोर्ड आईडी" सेट करें। इस तरह:

enter image description here

उदाहरण:

यहाँ जब एक सेल दोहन कैसे आप एक नया ViewController करने के लिए धक्का कर सकते हैं का एक उदाहरण है। अपने मामले इस hitTest समारोह में है में

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let yourNewView = self.storyboard!.instantiateViewControllerWithIdentifier("yourStoryBoardID") as! ViewControllerYourePushingTo 


     self.presentViewController(yourNewView, animated: true, completion: nil) 


} 

: जैसा कि बताया जा यदि आप किसी अन्य ViewController के लिए पुश करने के लिए विभिन्न कार्यों में इस विधि का उपयोग कर सकते हैं।

मैंने एक समान सवाल पूछा बहुत पहले नहीं। Swift: Triggering TableViewCell to lead to a link in a UIWebView in another ViewController

यहाँ एप्पल देव से लिंक है:: यहाँ संदर्भ है InstantiateViewControllerWithIdentifier

+0

मैं पर एक टैब का पता लगाने की जरूरत है बबल व्यू? –

+0

मुझे आपकी टिप्पणी समझ में नहीं आया। आपका क्या अर्थ है? – lukaivicev

+0

क्षमा करें, मुझे पूरा यकीन नहीं है कि आप क्या मतलब है और मैं इसे हिटटेस्ट से कैसे प्राप्त कर सकता हूं? –

1

आप कस्टम एनोटेशन देखने पर इशारा जोड़ सकते हैं didselectannotation में और इशारा कार्रवाई से अन्य दृश्य controllor पर नेविगेट

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