2016-08-04 5 views
0

Meine app stürzt ab und wirft diesen FehlerUnerkannte Selektor gesendet Instanz Grund: ‚- [UITouchesEvent rightView]

 
[UITouchesEvent rightView]: unrecognized selector sent to instance 0x13d5092e0 
2016-08-04 17:07:15.569 [3809:1375151] 

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITouchesEvent rightView]: unrecognized selector sent to instance 0x13d5092e0' 

*** First throw call stack: 
(0x180d72db0 0x1803d7f80 0x180d79c4c 0x180d76bec 0x180c74c5c 0x1000e681c 0x1000e6a60 0x185f08be8 0x185f08b64 0x185ef0870 0x185f11360 0x185f07ed8 0x185f00c20 0x185ed104c 0x185ecf628 0x180d2909c 0x180d28b30 0x180d26830 0x180c50c50 0x182538088 0x185f3a088 0x1000f5c88 0x1807ee8b8) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Ich versuche, eine benutzerdefinierte Klasse für das Ausblenden zu machen und das Passwort zeigen, damit ich verwenden kann, es in irgendeiner UITextField in irgendeiner UIViewController.

class HideShowIcon:NSObject { 

    var showPasswordImage = UIImage(named: "ic_show_password") as UIImage? 
    var hidePasswordImage = UIImage(named: "ic_hide_password") as UIImage? 


    func hideShowPasswordButton(hideText:UITextField) { 

     var hideShowSize: CGSize = "12345".sizeWithAttributes([NSFontAttributeName:UIFont.systemFontOfSize(14.0)]) 
     var hideShow: UIButton = UIButton(type: UIButtonType.System) 
     hideShow.frame = CGRect(x: 0, y: 0, width: hideShowSize.width, height: hideText.frame.size.height) 
     hideShow.setImage(hidePasswordImage, forState: UIControlState.Normal) 
     hideText.rightView = hideShow 
     hideText.rightViewMode = UITextFieldViewMode.Always 
     hideShow.addTarget(self, action: #selector(HideShowIcon.hideShowPasswordTextField(_:hideText:)), forControlEvents: UIControlEvents.AllTouchEvents) 

    } 
    func hideShowPasswordTextField(sender: AnyObject,hideText:UITextField) { 

     var hideShow: UIButton = (hideText.rightView as? UIButton)! 
     if !hideText.secureTextEntry { 
      hideText.secureTextEntry = true 

      hideShow.setImage(hidePasswordImage, forState: UIControlState.Normal) 
     } else { 
      hideText.secureTextEntry = false 
      hideShow.setImage(showPasswordImage, forState: UIControlState.Normal) 
     } 
     hideText.becomeFirstResponder() 
    } 
} 

Antwort

0

Sie können nicht Selektor mit vielen Parametern hideShowPasswordTextField(_:hideText:) für UIButton Ziel verwenden. Sie können nur Selektor mit einem (oder Null) Parameter verwenden, in denen UIButton wird sich setzen: hideShowPasswordTextField(_:)

func hideShowPasswordTextField(sender: UIButton) { 
    //... 
} 

hideText in dieser Funktion nutzen zu können, können Sie es als Eigenschaft Ihrer Klasse deklarieren:

var hideText: UITextField! 

und zuweisen Wert im Klasseninitialisierungsschritt

+0

Auf diese Weise, während der Klick auf die Schaltfläche Bild ausblenden und anzeigen, kann ich den Text auf lange drücken Sie die Schaltfläche zum Ausblenden und Anzeigen. Wenn Sie einmal klicken und verlassen, geht der Text zurück in den versteckten Zustand. –

+1

Vielen Dank. Es klappt. Ich musste UIControlEvents.AllTouchEvents zu TouchUpInside ändern –