我有一个SwipeView,内部有一个带有SwipeDelegate的中继器。问题是,有时我在滑动重复项时将其注册为我想要的SwipeDelegate上的滑动,但有时将其注册为SwipeView上的滑动并更改了我不想要的页面。下面的代码为清楚起见。
总有优先权给SwipeDelegate,因此它总是比SwipeView拥有优先权吗?还是实施这种嵌套的滑动区域只是不好的做法?
我尝试使用代码中所示的z顺序,但这无济于事。
TabBar {
id: appTabBar
contentContainer: swipeView
TabButton {
text: "Add History"
}
TabButton {
text: "View History"
}
}
QC2.SwipeView {
id: swipeView
anchors.top: appTabBar.bottom
anchors.bottom: parent.bottom
width: parent.width
clip: true
z: 1
Item {}
Item {
Column {
id: table
width: parent.width
spacing: 3
Repeater {
id: foodTableRepeater
height: dp(20)
model: []
delegate: QC2.SwipeDelegate {
id: swipeDelegate
width: parent.width
Rectangle {
height: parent.height
width: parent.width
color: (index % 2 === 0) ? "#D3F2FF" : "#FFFFFF"
border.color: "blue"
border.width: dp(1)
z: 2
Row {
height: parent.height
width: parent.width
AppText {
id: date
leftPadding: dp(10)
width: parent.width
anchors.verticalCenter: parent.verticalCenter
text: JSFuns.getLocaleDateTime(app.locale, modelData[2], app.use_24)
}
}
}
swipe.right: QC2.Label {
id: deleteLabel
verticalAlignment: QC2.Label.AlignVCenter
padding: 5
width: parent.width * 0.4 / 3
height: parent.height
anchors.right: parent.right
z: 3
Icon {
width: parent.width
anchors.verticalCenter: parent.verticalCenter
icon: IconType.close
size: parent.height
color: "red"
}
QC2.SwipeDelegate.onClicked: console.debug(index)
background: Rectangle {
color: deleteLabel.QC2.SwipeDelegate.pressed ?
Qt.darker(app.color_secondary_light, 1.1) :
app.color_secondary_light
}
}
}
}
}
}
}
答案 0 :(得分:0)
我认为我得到了一个似乎运行良好的修复程序。我修改了SwipeDelegate,如下所示:
delegate: QC2.SwipeDelegate {
id: swipeDelegate
width: parent.width
onPressed: swipeView.interactive = false // New line
onCanceled: swipeView.interactive = true // New line
添加的这两行代码只是打开和关闭SwipeView,在与SwipeDelegate进行交互时将其关闭,并在用户完成操作后重新打开。
到目前为止,唯一的缺点是我无法通过向右滑动SwipeDelegate来使用SwipeView。但是,这很小。