我创建了一个UITextField
,其中包含UIPickerView
和UIToolbar
,以便有一个很好的选择轮,其中包含" Save"和"取消"按钮。 pickerTextField在我的班级顶部定义:
let pickerTextField = UITextField()
当用户点按SKSpriteNode
时会调用其余内容,以便我通过覆盖touchesBegan
功能跟踪触摸
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent?) {
if let touch = touches.first as? UITouch {
var touchLocation = touch.locationInNode(self)
let touchedNode = self.nodeAtPoint(touchLocation)
if let name = touchedNode.name
{
if name == "overlay_player"
{
pickerTextField.frame = CGRectMake(0, 0, view!.bounds.width, view!.bounds.height*0.5)
let playerCountryPicker = UIPickerView()
playerCountryPicker.delegate = self
playerCountryPicker.dataSource = self
playerCountryPicker.layer.borderColor = UIColor.blackColor().CGColor
playerCountryPicker.layer.borderWidth = 1
playerCountryPicker.backgroundColor = UIColor.whiteColor()
playerCountryPicker.showsSelectionIndicator = true
var toolBar = UIToolbar()
toolBar.barStyle = UIBarStyle.Default
toolBar.translucent = true
toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
toolBar.sizeToFit()
var doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "savePickerPlayer:")
var spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
var cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "cancelPickerPlayer:")
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
toolBar.userInteractionEnabled = true
pickerTextField.inputView = playerCountryPicker
pickerTextField.inputAccessoryView = toolBar
self.view?.addSubview(pickerTextField)
}
}
}
}
我的问题是:当点击SKSpriteNode
代码时,但文字字段不会显示。但是,如果我点击任何其他对象(例如第二个{{1}}),文本字段会显示,但不再执行代码。
从我的角度来看,似乎该视图尚未更新,但尝试使用
SKSpriteNode
没有任何效果。我想我在这里错过了一个简单的观点,但我很难找到它。 有什么想法吗?
/编辑:找到一个解决方法我可以向有相同问题的人提出建议(不是解决方案):
将self.view?.setNeedsDisplay()
self.view?.setNeedsLayout()
self.view?.reloadInputViews()
替换为UITextField
。您需要设置UILabel
,而不是使用yourLabel.userInteractionEnabled = true
和UITextField.inputView
,您只需将UITextField.inputAccessoryView
和UIToolbar
添加为子视图。
您必须自己处理动画,但这只是一个简单的
UIPickerView
应该做的伎俩。一般问题为什么需要两个动作来显示class func animateWithDuration(_ duration: NSTimeInterval,
animations animations: () -> Void)
仍然是开放的。
答案 0 :(得分:1)
可能是pickerTextField
子视图不在前面。
尝试添加以下内容。
self.view?.addSubview(pickerTextField)
self.view?.bringSubviewToFront(pickerTextField)