以下是我所拥有的:ListView和TextField中的SwipeDelegate,用于填充此委托。当我尝试滑动委托时,TextField会获得焦点,而我却无法做到。 这就是我需要的:当我尝试滑动TextField并仅在我点击它时传递焦点时滑动TextField。我需要的一个例子是"提醒"中的注释行为。 iOS上的应用程序。是否有可能以某种方式改变这种结构的行为,使其对我需要的滑动作出反应? 简化代码:
import QtQuick 2.9
import QtQuick.Controls 2.3
import QtQuick.Window 2.3
Window {
id: root
width: 320
height: 480
visible: true
ListModel {
id: simpleModel
ListElement {
text: "some text"
}
ListElement {
text: "another text"
}
}
ListView {
id: simpleView
model: simpleModel
anchors.fill: parent
delegate: SwipeDelegate {
width: parent.width
contentItem: TextField {
text: model.text
onAccepted: model.text = text
}
swipe.right: Label {
id: deleteLabel
text: "Delete"
color: "white"
verticalAlignment: Label.AlignVCenter
padding: 12
height: parent.height
anchors.right: parent.right
SwipeDelegate.onClicked: simpleView.model.remove(index);
background: Rectangle {
color: "tomato"
}
}
}
}
}
答案 0 :(得分:0)
我要建议的是:
readOnly: true
然后对SwipeDelegate
本身的点击做出反应以启用编辑器:
onClicked: {
if (!swipe.complete) {
contentItem.visible = true
contentItem.forceActiveFocus()
}
}
虽然这不起作用,因为TextField
似乎消耗鼠标事件,即使它是只读的。我不确定这是不是一个错误;它可能会阻止鼠标事件进入其下方的项目。
无论如何,您可以隐藏TextField
以防止它干扰鼠标事件,并在其位置显示一些文字:
import QtQuick 2.9
import QtQuick.Controls 2.3
import QtQuick.Window 2.3
Window {
id: root
width: 320
height: 480
visible: true
ListModel {
id: simpleModel
ListElement {
text: "some text"
}
ListElement {
text: "another text"
}
}
ListView {
id: simpleView
model: simpleModel
anchors.fill: parent
delegate: SwipeDelegate {
id: swipeDelegate
width: parent.width
text: model.text
onClicked: {
if (!swipe.complete) {
contentItem.visible = true
contentItem.forceActiveFocus()
}
}
Text {
anchors.fill: contentItem
anchors.leftMargin: contentItem.leftPadding
verticalAlignment: Text.AlignVCenter
text: model.text
visible: !contentItem.visible
}
contentItem: TextField {
text: model.text
visible: false
onAccepted: model.text = text
}
swipe.right: Label {
id: deleteLabel
text: "Delete"
color: "white"
verticalAlignment: Label.AlignVCenter
padding: 12
height: parent.height
anchors.right: parent.right
SwipeDelegate.onClicked: simpleView.model.remove(index);
background: Rectangle {
color: "tomato"
}
}
}
}
}
我不知道iOS接受/取消输入的功能,但我相信你可以把这部分搞清楚。回应该事件并隐藏TextField
,它应该都可以正常工作。