首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义CallOutView swift的处理选择

自定义CallOutView swift的处理选择
EN

Stack Overflow用户
提问于 2015-10-29 17:34:40
回答 2查看 326关注 0票数 6

我已经创建了一个自定义callOutView,它似乎工作得很好。不过,我在处理自定义callOut视图上的点击时遇到了问题。我想推到一个特定的viewController时,它是被选中的。我怎样才能做到这一点?

下面我添加了我的FBSingleClusterView,它是自定义MKAnnotationView,bubbleView是自定义callOutView。除此之外,我当然还有一个viewController和一个mapView。

FBSingleClusterView变量

代码语言:javascript
复制
private var hitOutside:Bool = true


var preventDeselection:Bool {
    return !hitOutside
}

FBSingleClusterView methods

代码语言:javascript
复制
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 methods

代码语言:javascript
复制
    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)
    }



}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-31 20:45:09

你试过使用instantiateViewControllerWithIdentifier吗?您可以在点击按钮、在viewDidLoad或任何其他您希望它触发并按下新的viewController的方法中触发这一点。

首先,为故事板中的viewController设置“故事板ID”。如下所示:

示例:

下面是一个例子,说明在敲击单元格时,如何推入一个新的viewController。如前所述,您可以在不同的函数中使用此方法将其推送到另一个viewController:

代码语言:javascript
复制
  override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

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


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


}

在您的例子中,这是在hitTest函数中。

不久前,我也问了一个类似的问题。以下是参考资料:Swift:触发TableViewCell到另一个ViewController中的UIWebView中的链接

这是来自Apple:InstantiateViewControllerWithIdentifier的链接

票数 3
EN

Stack Overflow用户

发布于 2015-11-06 18:22:35

您可以在自定义注释视图中添加手势,并通过手势操作导航到其他视图控件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33421010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档