文本字段仅在另一个操作后可见

时间:2015-09-18 14:02:07

标签: ios swift uitextfield

我创建了一个UITextField,其中包含UIPickerViewUIToolbar,以便有一个很好的选择轮,其中包含" 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 = trueUITextField.inputView,您只需将UITextField.inputAccessoryViewUIToolbar添加为子视图。

您必须自己处理动画,但这只是一个简单的

UIPickerView

应该做的伎俩。一般问题为什么需要两个动作来显示class func animateWithDuration(_ duration: NSTimeInterval, animations animations: () -> Void) 仍然是开放的。

1 个答案:

答案 0 :(得分:1)

可能是pickerTextField子视图不在前面。

尝试添加以下内容。

self.view?.addSubview(pickerTextField)
self.view?.bringSubviewToFront(pickerTextField)