2015-12-10 2 views
0

Я занимаюсь перекодировкой приложений на основе PUREMVC с объектива-c в Swift.Swift - событие UIButton не срабатывает

Теперь я создаю кнопку формы и отправки, но ни одно из событий, которые она запускает. Ни текстовые поля не редактируются, но не нажата кнопка. Клавиатура на текстовых полях все еще появляется при касании, но никаких событий не запускается. Вот мой код:

class LoginViewController: UIViewController, UITextFieldDelegate{ 

    var emailTF: UITextField! 
    var passwordTF: UITextField! 
    var submitBTN: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     self.view.backgroundColor = UIColor.redColor() 

     // EMAIL 
     self.emailTF = ViewElements.formTextField(FORM_DEFAULT_USERNAME) 
     self.emailTF.tag = 100 
     self.view.addSubview(self.emailTF) 

     // PASSWORD 
     self.passwordTF = ViewElements.formTextField(FORM_DEFAULT_PASSWORD) 
     self.passwordTF.tag = 200 
     self.view.addSubview(self.passwordTF) 

     // SUBMIT 
     self.submitBTN = ViewElements.formButtonSubmit(FORM_SUBMIT_TEXT) 
     self.submitBTN.tag = 300 
     self.submitBTN.addTarget(self, action: "pressedButton", forControlEvents: UIControlEvents.TouchUpInside) 
     self.submitBTN.userInteractionEnabled = true 
     self.view.userInteractionEnabled = true 
     self.view.addSubview(self.submitBTN) 


     // layout 

     let tX = (SCREENWIDTH-NAVI_WIDTH)*0.5 
     let tY = SCREENHEIGHT*0.3 

     self.emailTF.frame = CGRect(x: tX, y: tY-NAVI_HEIGHT*1.2, width: NAVI_WIDTH, height: NAVI_HEIGHT) 

     self.passwordTF.frame = CGRect(x: tX, y: tY+NAVI_HEIGHT*0.2, width: NAVI_WIDTH, height: NAVI_HEIGHT) 

     self.submitBTN.frame = CGRect(x: tX, y: tY+NAVI_HEIGHT*1.6, width: NAVI_WIDTH, height: NAVI_HEIGHT) 


     // events 
     self.emailTF.delegate = self 
     self.passwordTF.delegate = self 

     print("---1---") 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    /* 
    var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light)) as UIVisualEffectView 
    visualEffectView.frame = self.introImage.bounds 
    self.introImage.addSubview(visualEffectView) 
    visualEffectView.alpha = 0.0 
    */ 

    // FORM EVENTS 


    func textFieldDidBeginEditing(textField: UITextField) { 
     print ("---") 
    } 

    func textFieldShouldEndEditing(textField: UITextField) -> Bool { 
     print ("---") 
     return false 
    } 


    func pressedButton(sender: UIButton!) { 
     print("::") 
    } 
} 

В случае, если вы хотите увидеть Util я использую для создания элементов:

class func formTextField(myText: String) -> UITextField 
{ 
    let newTextField: UITextField = UITextField(frame: CGRect(x: 0, y: 0, width: NAVI_WIDTH, height: NAVI_HEIGHT)); 
    newTextField.text = myText as String 
    newTextField.borderStyle = UITextBorderStyle.Line 
    newTextField.backgroundColor = UIColor.colorWithAlphaComponent(UIColor.whiteColor())(0.5) 
    newTextField.textAlignment = NSTextAlignment.Center 

    return newTextField 
} 

class func formButtonSubmit(myText: String) -> UIButton 
{ 
    let newButton: UIButton = UIButton() 
    newButton.setTitle(myText, forState: .Normal) 
    newButton.setTitleColor(UIColor.blackColor(), forState: .Normal) 
    newButton.titleLabel!.font = UIFont(name: "InterstateCondensed", size: 45) 
    newButton.titleLabel!.textColor = UIColor.blackColor() 
    newButton.titleLabel!.textAlignment = .Center 
    newButton.backgroundColor = UIColor.colorWithAlphaComponent(UIColor.whiteColor())(0.8) 
    newButton.frame = CGRect(x: 0, y: 0, width: NAVI_WIDTH, height: NAVI_HEIGHT) 

    return newButton 
} 

Действительно странно, что ни одно событие не стреляет. Кто угодно?

+0

Вы добавили селектор в свой контроль? – a4arpan

+0

После того, как вы попробовали все ниже и ничего не помогли, я скопировал весь код представления в новый быстрый проект, и все работает. Так что я еще не сумасшедший. Но вопрос в том, что останавливает управление представлением таким образом? Я хочу, чтобы это работало в рамках PuremVC. –

+0

как вы подключаете это к своей доске объявлений? – adolfosrs

ответ

0

При вызове действия вы можете использовать Selector.

self.submitBTN.addTarget(self, action: Selector("pressedButton"), forControlEvents: UIControlEvents.TouchUpInside) 

Для задач TextField (и я предполагаю здесь), то проблема может быть, что вы instatiating делегата после добавления подвида.

// PASSWORD 
    self.passwordTF = ViewElements.formTextField(FORM_DEFAULT_PASSWORD) 
    self.passwordTF.tag = 200 
    self.passwordTF.delegate = self 
    self.view.addSubview(self.passwordTF) 

    // SUBMIT 
    self.submitBTN = ViewElements.formButtonSubmit(FORM_SUBMIT_TEXT) 
    self.submitBTN.tag = 300 
    self.submitBTN.addTarget(self, action: "pressedButton", forControlEvents: UIControlEvents.TouchUpInside) 
    self.submitBTN.userInteractionEnabled = true 
    self.view.userInteractionEnabled = true 
    self.emailTF.delegate = self 
    self.view.addSubview(self.submitBTN) 
+0

Пробовал селектор до и снова. нет разницы. Также там была декларация делегата, нет разницы. –

0

пытаются заменить action: "pressedButton", с action: "pressedButton:",

или попытаться удалить параметр из pressedButton метода, если вы его не используете.

0

Вы забыли добавить : после pressedButton этого следует решить вашу проблему:

self.submitBTN.addTarget(self, action: Selector("pressedButton:"), forControlEvents: .TouchUpInside) 

Также всемогущий Xcode дал вам Storyboard, которые сделают вашу жизнь намного проще, вам не нужно будет устанавливать все параметры из код, даже делегат и источник данных установлены из него

+0

Пробовал это, ничего не исправляет. Мне нравится код, и я ненавижу раскадровки. Я держусь с одним редактором, чистым и простым. Делает вещи чище и отлично работает для меня во всех моих объективных проектах. –

0

Я думал, что отправил ответ. Проблема заключается в том, как я добавляю свой диспетчер представлений в окно без использования раскадровки (что мне не нравится). Все приведенные выше идеи кода правильные, но не исправляют мою проблему. Я зафиксировал это следующим образом:

window.rootViewController = rootView 
     window.makeKeyAndVisible() 

Просто как это. Всем спасибо.

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