2017-09-29 6 views
0

Ich habe ein Programm erstellt, in dem die Auswahl beim Klicken auf mein Textfeld angezeigt wird, und ich versuche es zu schließen, wenn ich in meiner Symbolleiste auf "Fertig" oder "Abbrechen" klicke.Fehler beim Versuch, die Auswahl zu löschen

Ich habe keine Ahnung, wo es schief gelaufen ist. Obwohl es sagt

"2017-09-28 20: 45: 27.877897-0600 project1 [51296: 5112470] [LayoutConstraints] Kann nicht gleichzeitig Bedingungen erfüllen."

Alle meine Zwänge arbeiten gut atm ..

Hier ist mein Code:

@IBOutlet weak var textField1: UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 


    let picker: UIPickerView 

    picker = UIPickerView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 300)) 
    picker.backgroundColor = .white 

    picker.showsSelectionIndicator = true 
    picker.delegate = self 
    picker.dataSource = self 

    let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 40)) 
    toolBar.barStyle = UIBarStyle.default 
    toolBar.isTranslucent = true 
    toolBar.tintColor = .black 

    let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: 
     Selector(("donePicker"))) 
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 
    let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: Selector(("donePicker"))) 
    ) 

    toolBar.setItems([cancelButton, spaceButton, doneButton], animated: true) 
    toolBar.isUserInteractionEnabled = true 

    let bgView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 250 + toolBar.frame.size.height)) 
    print(picker.frame.size.height, toolBar.frame.size.height, bgView.frame.size.height) 


    bgView.addSubview(picker) 
    bgView.addSubview(toolBar) 
    textField1.inputView = bgView 
} 

func donePicker() { 
    textField1.resignFirstResponder() 
} 

Und das ist der Fehler, dass es mich gibt:

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 
2017-09-28 20:45:29.253610-0600 project1[51296:5112470] [MC] Lazy loading NSBundle MobileCoreServices.framework 
2017-09-28 20:45:29.255001-0600 project1[51296:5112470] [MC] Loaded MobileCoreServices.framework 
2017-09-28 20:45:29.274235-0600 project1[51296:5112470] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /Users/Andrew/Library/Developer/CoreSimulator/Devices/EE44EDE5-BDF6-4A15-A44B-387E14685DAA/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles 
300.0 44.0 294.0 
2017-09-28 20:45:30.401748-0600 project1[51296:5112470] [MC] Reading from private effective user settings. 
2017-09-28 20:45:31.827410-0600 project1[51296:5112470] -[project1.CalculateViewController donePicker]: unrecognized selector sent to instance 0x7faac1d0fab0 
2017-09-28 20:45:31.835746-0600 project1[51296:5112470] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[project1.CalculateViewController donePicker]: unrecognized selector sent to instance 0x7faac1d0fab0' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000010c8a11cb __exceptionPreprocess + 171 
    1 libobjc.A.dylib      0x000000010a93cf41 objc_exception_throw + 48 
    2 CoreFoundation      0x000000010c921914 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 
    3 UIKit        0x000000010d4660bd -[UIResponder doesNotRecognizeSelector:] + 295 
    4 CoreFoundation      0x000000010c824178 ___forwarding___ + 1432 
    5 CoreFoundation      0x000000010c823b58 _CF_forwarding_prep_0 + 120 
    6 UIKit        0x000000010d23f9bd -[UIApplication sendAction:to:from:forEvent:] + 83 
    7 UIKit        0x000000010dc3353f __45-[_UIButtonBarTargetAction _invoke:forEvent:]_block_invoke + 154 
    8 UIKit        0x000000010dc33470 -[_UIButtonBarTargetAction _invoke:forEvent:] + 181 
    9 UIKit        0x000000010d23f9bd -[UIApplication sendAction:to:from:forEvent:] + 83 
    10 UIKit        0x000000010d3b6183 -[UIControl sendAction:to:forEvent:] + 67 
    11 UIKit        0x000000010d3b64a0 -[UIControl _sendActionsForEvents:withEvent:] + 450 
    12 UIKit        0x000000010d3b53cd -[UIControl touchesEnded:withEvent:] + 618 
    13 UIKit        0x000000010d2b3d4f -[UIWindow _sendTouchesForEvent:] + 2807 
    14 UIKit        0x000000010d2b5472 -[UIWindow sendEvent:] + 4124 
    15 UIKit        0x000000010d25a802 -[UIApplication sendEvent:] + 352 
    16 UIKit        0x000000010db8ca50 __dispatchPreprocessedEventFromEventQueue + 2809 
    17 UIKit        0x000000010db8f5b7 __handleEventQueueInternal + 5957 
    18 CoreFoundation      0x000000010c8442b1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    19 CoreFoundation      0x000000010c8e3d31 __CFRunLoopDoSource0 + 81 
    20 CoreFoundation      0x000000010c828c19 __CFRunLoopDoSources0 + 185 
    21 CoreFoundation      0x000000010c8281ff __CFRunLoopRun + 1279 
    22 CoreFoundation      0x000000010c827a89 CFRunLoopRunSpecific + 409 
    23 GraphicsServices     0x00000001122ee9c6 GSEventRunModal + 62 
    24 UIKit        0x000000010d23dd30 UIApplicationMain + 159 
    25 UofA Engineering Master    0x0000000109ffa307 main + 55 
    26 libdyld.dylib      0x000000010fbc5d81 start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 

Antwort

0

ich versucht habe, ein anderer Ansatz, um PickerView und toolbar in textField zu zeigen.

dies versuchen, wenn es in Ihrem Szenario hilft:

let toolBar = UIToolbar() 
toolBar.barStyle = UIBarStyle.default 
toolBar.isTranslucent = true 
toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1) 
toolBar.sizeToFit() 

let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(CalculateViewController.donePicker)) 
let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 
let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(CalculateViewController.cancelPicker)) 

toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) 
toolBar.isUserInteractionEnabled = true 

textField1.inputView = pickerView 
textField1.inputAccessoryView = toolBar 
0

Sie können die Fehlermeldung sehen ist:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[project1.CalculateViewController donePicker]: unrecognized selector sent to instance 0x7faac1d0fab0' 

Für Swift, wir definieren nicht die selector so (es ist das Ziel C Weg). Sie sollten wie folgt verwenden:

let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: 
    #selector(donePicker)) 
0

da der Fehler Unbekannter Selektor an Instanz gesendet, können Sie die Picker lassen ein Eigentum. ersetzen Sie die let picker: UIPickerView aus der viewdidload Methode mit var picker: UIPickerView?

Verwandte Themen