Swift - Получение местоположения нажатия на кнопку, созданную с помощью пользовательского класса UIView

swift

126 просмотра

1 ответ

У меня есть основной скроллер в моем основном UIViewControllerи пользовательском UIViewклассе. Этот пользовательский UIViewкласс имеет несколько строк кода для создания Buttonи Labelпрограммирования. Действие, выполняемое Buttonщелчком, работает нормально, но мне также нужно получить точное местоположение нажатия ( CGPoint) на кнопке, так как кнопка длинная, и для следующих действий требуется координата x нажатия. Я попробовал несколько решений , полученные от StackOverflow и работают на другие объекты , как Labelи , Imageviewно не работают для кнопки.

Мой пользовательский класс 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)
    }
}

И код в главном Viewcontroller

let DrawProjectLanes = DrawProj(frame: CGRect(x: startx, y: starty, width: endx , height: 50))
DrawProjectLanes.backgroundColor = UIColor.clearColor()
DrawProjectLanes.userInteractionEnabled = true
MainScroller.addSubview(DrawProjectLanes)
Автор: Vijesh Kk Источник Размещён: 08.11.2019 11:16

Ответы (1)


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, сделать это, чтобы получить положение крана по оси х относительно рамки кнопки:

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

Затем вы можете использовать эту posXпеременную как хотите.

Как создать экземпляр контроллера представления:

В раскадровке выберите ВК, который вы хотели бы представить. Перейдите к инспектору идентичности, установите Storyboard ID для VC:

введите описание изображения здесь

Тогда в коде,

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)
Автор: Sweeper Размещён: 20.08.2016 01:22
Вопросы из категории :
32x32