Swift - связывает программно созданные кнопки и метки друг с другом - PullRequest
0 голосов
/ 28 ноября 2018

Я создаю все программно, и у меня возникают проблемы со связыванием нескольких кнопок, чтобы реагировать на выбранное пользовательское действие.

синяя кнопка создается программно, и я использую теги, чтобы отслеживать, какая из них нажата.Когда синяя кнопка выбрана, появляется меню действий, в котором можно связать действия с кнопкой, нажав значок добавления.

Вы можете выбрать нужное действие, нажав «выбрать», затем нажмите и перетащите изКнопка «o» для создания соединителя.

Я храню в словаре выбранное действие и какие кнопки к нему подключены

Вопрос в том, как связать кнопку «o», кнопку «выбрать» и метку «name» изодин и тот же ряд друг к другу, когда они создаются программно?Я не использую tableview для создания действий.Это будет проще в использовании?

enter image description here

Это создает строку действий

// MARK: - ACTION Input
func createAction()
{
    let actionTabContainer = UIView()
    actionTabContainer.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
    actionTabContainer.translatesAutoresizingMaskIntoConstraints = false
    actionTabContainer.backgroundColor = UIColor.darkGray
    actionTabContainer.layer.borderWidth = 2
    actionTabContainer.layer.borderColor = UIColor(red: 29/255.0, green: 30/255.0, blue: 33/255.0, alpha: 1.0).cgColor

    actionScrollViewContainer.addSubview(actionTabContainer)

    actionTabContainer.widthAnchor.constraint(equalToConstant: actionScrollViewContainer.frame.width).isActive = true
    actionTabContainer.heightAnchor.constraint(equalToConstant: 50).isActive = true
    actionTabContainer.leftAnchor.constraint(equalTo: actionScrollViewContainer.leftAnchor, constant: 10).isActive = true
    actionTabContainer.topAnchor.constraint(equalTo: actionScrollViewContainer.topAnchor, constant: 2 + constantAdd).isActive = true
    constantAdd = constantAdd + 50

    let connectorBtn = UIButton()
    connectorBtn.createRectangleButton(buttonPositionX: 0, buttonPositionY: 0, buttonWidth: 0, buttonHeight: 0, buttonTitle: "O", buttonTag: 400)
    connectorBtn.translatesAutoresizingMaskIntoConstraints = false
    connectorBtn.backgroundColor = UIColor.gray

    actionTabContainer.addSubview(connectorBtn)

    connectorBtn.widthAnchor.constraint(equalToConstant: 30).isActive = true
    connectorBtn.heightAnchor.constraint(equalToConstant: 30).isActive = true
    connectorBtn.leftAnchor.constraint(equalTo: actionTabContainer.leftAnchor, constant: 10).isActive = true
    connectorBtn.centerYAnchor.constraint(equalTo: actionTabContainer.centerYAnchor, constant: 0).isActive = true
    connectorBtn.addTarget(self, action: #selector(addConnector(sender:)), for: .touchUpInside)

    addPanReconiser(view: connectorBtn)

    let chooseActionButton = UIButton()
    chooseActionButton.createRectangleButton(buttonPositionX: 0, buttonPositionY: 0, buttonWidth: 0, buttonHeight: 0, buttonTitle: "select", buttonTag: 700)
    chooseActionButton.translatesAutoresizingMaskIntoConstraints = false
    chooseActionButton.backgroundColor = UIColor.gray
    chooseActionButton.layer.cornerRadius = 0

    actionTabContainer.addSubview(chooseActionButton)

    chooseActionButton.widthAnchor.constraint(equalToConstant: 110).isActive = true
    chooseActionButton.heightAnchor.constraint(equalToConstant: 30).isActive = true
    chooseActionButton.leftAnchor.constraint(equalTo: connectorBtn.rightAnchor, constant: 10).isActive = true
    chooseActionButton.centerYAnchor.constraint(equalTo: connectorBtn.centerYAnchor, constant: 0).isActive = true
    chooseActionButton.addTarget(self, action: #selector(addConnector(sender:)), for: .touchUpInside)


    let actionMarkerConnectedLabel =  UILabel()
    actionMarkerConnectedLabel.createLabel(labelPositionX: 0, labelPositionY: 0, labelWidth: 0, labelHeight: 0, labelTitle: "name")
    actionMarkerConnectedLabel.backgroundColor = UIColor.gray
    actionMarkerConnectedLabel.translatesAutoresizingMaskIntoConstraints = false
    actionMarkerConnectedLabel.textAlignment = .center

    connectorBtn.addSubview(actionMarkerConnectedLabel)

    actionMarkerConnectedLabel.widthAnchor.constraint(equalToConstant: 100).isActive = true
    actionMarkerConnectedLabel.heightAnchor.constraint(equalToConstant: 32).isActive = true
    actionMarkerConnectedLabel.leftAnchor.constraint(equalTo: chooseActionButton.rightAnchor, constant: 10).isActive = true
    actionMarkerConnectedLabel.centerYAnchor.constraint(equalTo: connectorBtn.centerYAnchor, constant: 0).isActive = true

}

У меня есть свои собственные расширения для создания прямоугольникови другие формы, которые могут показаться запутанными.

Спасибо за любые рекомендации

1 Ответ

0 голосов
/ 28 ноября 2018

Я думаю, что будет лучше, если использовать табличное представление и управлять ими с помощью indexPath.Если нет, вы можете создать переменную для сохранения «Count», тогда при создании new:

count += 1
button1.tag = count
button2.tag = count
...