2015-10-29 1 views
6

私はカスタムのcallOutViewを作成しましたが、これはうまくいくようです。しかし、私はカスタムcallOutビューでタップを処理することに問題があります。それが選択されると、特定のviewControllerにプッシュしたいと思います。どうすればこれを達成できますか?カスタムCallOutViewスウィフトのハンドルの選択

以下は私のFBSingleClusterView(カスタムMKAnnotationView)とbubbleView(カスタムcallOutView)を追加しました。これの横には、mapViewを持つviewControllerがあります。

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のボタンをタップしたり、他の方法でトリガーしたり、新しいviewControllerをプッシュしたりするときに、これをトリガすることができます。

まず、ストーリーボードのviewControllerの「ストーリーボードID」を設定します。このように:

enter image description here

例:

はここで、セルをタップしたときに新しいのViewControllerにプッシュすることができる方法の例です。前述のように、あなたは別のViewControllerにプッシュするためにさまざまな機能で、このメソッドを使用することができます。

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

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


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


} 

をお使いの場合、これはhitTest FUNCにあるで。

私はあまりにもずっと前に同様の質問をしました。ここに参照です:Swift: Triggering TableViewCell to lead to a link in a UIWebView in another ViewController

はここでAppleのデベロッパーからのリンクです:InstantiateViewControllerWithIdentifier

+0

をナビゲートすることができ、私は上のタブを検出する必要がありますバブルビュー? –

+0

あなたのコメントを理解できませんでした。どういう意味ですか? – lukaivicev

+0

申し訳ありませんが、私はちょうどあなたが何を意味し、どのように私はhitTestからこれを得ることができますか? –

1

あなたはdidselectannotationでカスタム注釈ビュー上のジェスチャーを追加し、ジェスチャーアクションから他のビューcontrollorに

関連する問題