2016-03-19 3 views
0

У меня есть этот код ниже:TouchUpInside Кнопка не работает

override func viewDidLoad() { 
     super.viewDidLoad() 
     ... 
     signInButton = CustomButton(frame: CGRectMake(12.5/100.0 * self.view.bounds.size.width, 5/6.0 * self.view.bounds.size.height, 60, 23)) 
     signInButton.customizeButtonText("Sign in") 

     joinButton = CustomButton(frame: CGRectMake((75/100.0 * self.view.bounds.size.width), 5/6.0 * self.view.bounds.size.height, 60, 23)) 
     joinButton.customizeButtonText("Join") 

     userNameTextField = CustomTextField(frame: CGRectMake(-500, 60/100.0 * self.view.bounds.size.height, 400, 35)) 
     userNameTextField.placeholder = "Username" 

     passwordTextField = CustomTextField(frame: CGRectMake(-500, 70/100.0 * self.view.bounds.size.height, 400, 35)) 
     passwordTextField.placeholder = "Password" 

     signInButton.addTarget(self, action: "signInButtonClicked:", forControlEvents: UIControlEvents.TouchUpInside) 
     joinButton.addTarget(self, action: "joinButtonClicked:", forControlEvents: UIControlEvents.TouchUpInside) 
} 

Тогда в методе signInButtonClicked: и joinButtonClicked: у меня есть этот код, где я анимировать UITextField для конкретных х и у позиции я хочу:

func signInButtonClicked(sender: UIButton!) { 
     UIView.animateWithDuration(0.25, delay: 0.25, options: UIViewAnimationOptions.CurveEaseInOut, animations: {() -> Void in 
      self.userNameTextField.frame = CGRectMake((-500 + ((50/100.0 * self.view.bounds.size.width) - 200)), 60/100.0 * self.view.bounds.size.height, 400,35) 
      }, completion: nil) 
    } 

    func joinButtonClicked(sender: UIButton!) { 
     UIView.animateWithDuration(0.25, delay: 0.25, options: UIViewAnimationOptions.CurveEaseInOut, animations: {() -> Void in 
      self.passwordTextField.frame = CGRectMake((-500 + ((50/100.0 * self.view.bounds.size.width) - 200)), 70/100.0 * self.view.bounds.size.height, 400,35) 
      }, completion: nil) 
    } 

По какой-то причине, когда я нажимаю на signInButton или joinButton, анимации текстовых полей не бывает. Я здесь что-то не так? Я добавил цель для обеих кнопок к себе и задал правильное действие для каждой из кнопок.

CustomButton Класс:

import UIKit 

class CustomButton: UIButton { 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     self.layer.cornerRadius = 2.0 
     self.layer.shadowColor = UIColor(red: SHAWDOW_COLOR, green: SHAWDOW_COLOR, blue: SHAWDOW_COLOR, alpha: 0.5).CGColor 
     self.layer.shadowRadius = 5.0 
     self.layer.shadowOpacity = 1 
     self.layer.shadowOffset = CGSizeMake(0.0, 2.0) 
     self.titleLabel?.font = UIFont(name: "NotoSans-Regular", size: 17.0) 
     self.backgroundColor = UIColor.redColor() 
     self.userInteractionEnabled = true 
    } 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder)! 
    } 

    func customizeButtonText(text: String!) { 
     self.setTitle(text, forState: UIControlState.Normal) 
    } 
} 

ответ

1

Используйте

joinButton.addTarget(self, action: Selector("joinButtonClicked:"), forControlEvents: UIControlEvents.TouchUpInside)` 

вместо

joinButton.addTarget(self, action: "joinButtonClicked:", forControlEvents: UIControlEvents.TouchUpInside) 
+2

Это не имеет никакого значения в Swift, если вы пишете 'Selector (" joinButtonClicked: ")' или просто '" joinButtonClicked: "'. –

+0

Я тоже попытался использовать это. Но, похоже, это не изменило ситуацию. – LP496

+1

Убедитесь, что ваши кнопки имеют 'userInteractionEnabled', а также все их супервизоры. – Jelly

0

Проверьте текущий и родительский вид контроллеров на:

  1. Сенсорные рамки должны быть в рамах просмотра.
  2. view.userInteractionEnabled. Они должны быть true.
+0

Можете ли вы объяснить, что такое «Сенсорные рамки должны быть в рамах зрения». означает? Как я могу это проверить? – LP496

+0

Триггер событий события в границах столкновений. – dimpiax

2

Ваш код: (должен быть) working; что не работает, так это то, как вы настраиваете расположение анимации в рамках этих методов действий.

Посмотрев, как вы установили начальные позиции UITextFields и положение после анимации, я пришел к пониманию того, что вы хотите, чтобы UITextFields был первоначально за пределами экрана, а затем один раз анимация на экране нажимаются кнопки.

Учитывая, что проблема заключается в следующих строках кода:

self.userNameTextField.frame = CGRectMake((((-500 + 50/100.0 * self.view.bounds.size.width) - 200)), 60/100.0 * self.view.bounds.size.height, 400, 35) 

self.passwordTextField.frame = CGRectMake((((-500 + 50/100.0 * self.view.bounds.size.width) - 200)), 70/100.0 * self.view.bounds.size.height, 400,35) 

Logging эти цифры, можно увидеть, что:

NSLog("%f", (-500 + ((50/100.0 * self.view.bounds.size.width) - 200))) 

-512.500000 

функции работают и так делать анимацию; просто вы анимации UITextField с позиции, которая изначально была за пределами экрана, ну, еще раз, что за пределами экрана.

простого изменения строки в следующие пределах анимации блоков, соответственно:

self.userNameTextField.frame = CGRectMake((((50/100.0 * self.view.bounds.size.width) - 200)), 60/100.0 * self.view.bounds.size.height, 400, 35) 

self.passwordTextField.frame = CGRectMake((((50/100.0 * self.view.bounds.size.width) - 200)), 70/100.0 * self.view.bounds.size.height, 400,35) 

позволяют нам видеть, что UITextField приходят в экран, кнопки один раз щелкнуть мышью.

+0

О, хорошо! Да, это сработало отлично. Дело в том, что мое текстовое поле все еще отключено. слева и справа. Каким будет правильный способ исправить это? Просто сделайте ширину каждого из текстовых полей короче или добавьте ограничения через код? – LP496

+0

Ничего, я понял, я просто вычислил ширину текстового поля на основе размера экрана. – LP496

Смежные вопросы