2016-08-20 38 views
0

創建我的主要UIViewController和一個自定義UIView類有一個主scrollerview按鈕獲取抽頭位置。這個自定義UIView類有幾行代碼來創建ButtonLabel編程。要通過Button點擊工作正常進行的行爲,但我也需要得到按鈕上的確切敲打位置(CGPoint)作爲按鈕被長和自來水x座標所需的下一步行動。我試過幾個解決方案從計算器了,並正在爲其他對象一樣LabelImageview但按鈕不起作用。斯威夫特 - 在其上通過自定義UIView類

我的自定義UIView類:

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-cordinate按鈕,不是滾動視圖或主屏幕。 –

回答

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) 
    } 
} 

touchesBegan,這樣做是爲了獲得相對於按鈕的框架水龍頭的x位置:

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

然後,但是你想,你可以使用這個posX變量。

如何創建一個視圖控制器:

在故事板中,選擇您想在座的VC。轉到身份檢查,設置一個Storyboard ID爲VC:

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座標。所以我認爲這個問題只有在Button中。 –

+0

@VijeshKk這是因爲'UIButton'是'UIControl'的一個子類,與其他普通舊視圖的工作方式不同。嘗試在按鈕 – Sweeper

+0

上將'userInteractionEnabled'設置爲false再次感謝。這工作,並能夠得到X座標。但現在我的動作:「onButtonTap:」不起作用。 'action:「onButtonTap」在主ViewController上,應該實例化一個新的視圖控制器。對於快速編程我很新,因此我很抱歉問太簡單的東西。 –