2016-08-20 9 views
0

私はメインののscrollerviewとカスタムUIViewクラスを持っています。このカスタムUIViewクラスは、プログラムによって、ButtonLabelを作成するコード行がわずかです。 Buttonクリックによって実行されるアクションはうまくいきますが、ボタンが長く、次の操作にタップx座標が必要なため、正確なタップ位置(CGPoint)をボタンに表示する必要があります。私はいくつかのソリューションをstackoverflowから取得し、LabelImageviewのような他のオブジェクトのために働いていますが、ボタンでは機能しません。Swift - カスタムUIViewクラスを使用して作成されたボタンのタップ位置を取得

マイカスタムUIViewクラス:メインのViewControllerで

import UIKit 
class DrawProj: UIView { 

    override func drawRect(rect: CGRect) { 
     let button = UIButton(type: .System) 
     button.frame = CGRectMake(24, 15, linewidth - 25, 20) 
     button.backgroundColor = UIColor.orangeColor() 
     button.addTarget(nil, action: "onButtonTap:", forControlEvents: .TouchUpInside) 
     self.addSubview(button) 
    } 
} 

とコード

let DrawProjectLanes = DrawProj(frame: CGRect(x: startx, y: starty, width: endx , height: 50)) 
DrawProjectLanes.backgroundColor = UIColor.clearColor() 
DrawProjectLanes.userInteractionEnabled = true 
MainScroller.addSubview(DrawProjectLanes) 
+0

申し訳ありませんが、言及するのを忘れてしまった、カスタムUIViewクラスでscrollerviewにサブビューとして追加されます主UIViewController。最後に、私は、カスタムUIViewクラスの上にscrollerviewの上に作成されたボタンを持って、私の目標はボタンタップ(.addTragetを使用して行うことができる)を行い、ボタンのタップの正確なx座標を取得することですscrollerviewやメイン画面ではありません。 –

答えて

0

あなたは仕事に、このためtouchesBeganをオーバーライドする必要があります。

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

} 

次にとしてあなたbuttonサブビューを宣言プロパティ:

class DrawProj: UIView { 
    var button: UIButton! 

    override func drawRect(rect: CGRect) { 
     button = UIButton(type: .System) 
     button.frame = CGRectMake(24, 15, linewidth - 25, 20) 
     button.backgroundColor = UIColor.orangeColor() 
     button.addTarget(nil, action: "onButtonTap:", forControlEvents: .TouchUpInside) 
     self.addSubview(button) 
    } 
} 

、ボタンのフレームに対してタップのx位置を、取得するには、この操作を行います。

let posX = touches.first!.locationInView(button).x 

次に、あなたがしたいしかし、あなたはこのposX変数を使用することができます。あなたが提示したいと思いVCを選択し、ストーリーボードで

:ビューコントローラをインスタンス化する方法

。アイデンティティインスペクタに移動し、VCのためのストーリーボードIDを設定します。

enter image description here

を次にコードで、

let sb = UIStoryboard(name: "Main", bundle: nil) 
let viewController = sb.instantiateViewControllerWithIdentifier("put the storyboard ID that you set earlier here") 
let topViewController = UIApplication.sharedApplication().keyWindow?.rootViewController?.presentationController 
topViewController?.presentViewController(viewController, animated: true, completion: nil) 
+0

お返事ありがとうございます。私はこれを試して、私はUIViewのCGRectフレーム上の他の場所をクリックすると、ボタン上ではないX座標を取得します。カスタムクラスにUIlabelを追加し、このUILabelをタップするときにX座標を取得できるようになりました。だから私は問題がボタンだけであると思う。 –

+0

@VijeshKkこれは、 'UIButton'が' UIControl'のサブクラスであり、他のプレーンな古いビューとは異なる働きをするからです。ボタンの 'userInteractionEnabled'をfalseに設定してみてください。 – Sweeper

+0

もう一度ありがとうございます。これは動作し、X座標を得ることができます。しかし、今私の行動: "onButtonTap:" doesnt work。 'action: "onButtonTap"はメインViewController上にあり、新しいView Controllerをインスタンス化するはずです。私はプログラミングをすばやく始めたばかりで、あまりにも簡単なことをしても大変申し訳ありません。 –

関連する問題