我試圖在播放聲音檔案時顯示一個暫停按鈕,我有一個統一的聲音檔案的真實來源,我可以通過ViewModel訪問它,現在在其他視圖上一切正常,但在所有導航鏈接的父視圖上,當我使用其他視圖的回傳按鈕回到它時,顯示暫停的迷你播放器消失了。
所以我決定在導航視圖或父視圖的文本視圖的.onAppear上,我將實作一個邏輯,可以檢測是否正在播放一個聲音檔案,如果是的話,在底部顯示一個按鈕來暫停聲音檔案。
現在我可以使用print,它在onAppear上顯示正確的聲音檔案播放與否的值,但當我試圖使用HStack或任何其他視圖被添加時,我得到了警告 -
Result of 'HStack<Content> ' initializer is unuse
現在,如果我決定使用State,那么我也會得到類似的警告,我怎樣才能讓View在Appear上重新渲染,或者這是不可能的,如果是這樣,我可以從哪里實作這個邏輯,謝謝....
import Foundation
import SwiftUI
struct HomePageTabView。View {
@Binding var songLVM: SongListVM
@State var miniBar: Bool = false
init(songLVM: Binding<SongListVM>){
self._songLVM = songLVM
UITableView.appearance().backgroundColor = UIC Color(.white)
}
var body: some View {
NavigationView {
List {
//Artists {
NavigationLink(
目的地。ArtistList( songLVM: $songLVM)
{
HStack {
Image(systemName: "music.mic")
Text(" Artists")
}
}
//專輯
NavigationLink(
目的地。Text("Albums"/span>))
{
HStack {
Image(systemName: "music.note.list")
Text("Albums")
}
}
//Collections
NavigationLink(
//destination: ArtistView())
目的地。ArtistViewMain( songLVM: $songLVM) )
{
HStack {
Image(systemName: "music.quarternote.3" )
Text("Collection")
}
}
//關于我們
NavigationLink(
目的地。Text("關于我們"))
{
HStack {
Image(systemName: "music.note.house.fill" )
Text("關于我們")
}
}
//聯系我們。
NavigationLink(
目的地。ArtistView())
{
HStack {
Image(systemName: "phone.circle"/span>)
Text("Contact Us")
}
}
}
}
.onAppear {
if(songLVM.audioPlayer?.isPlaying ! = nil){
HStack {
Button("stop") {
songLVM.audioPlayer?.stop()
}
}
}
}
}
}
我還試過
.onAppear{
miniBar.toggle()
if(miniBar == true){
HStack {
Text("stop")
}
}
}
但是得到了'HStack<Content>'初始化器的結果沒有使用
CodePudding
我將給出簡單而基本的模板來處理Swift的ui狀態。 你可以參考它并添加你的視圖或導航鏈接。
struct YourView: View {
///如果你想在init上傳遞它,請使用@ObservedObject代替。
///https://www.hackingwithswift.com/quick-start/swiftui/whats-the-difference-between-observedobject-state-and-environmentobject
@StateObject var viewModel = YourViewModel()
var body。some View {
NavigationView {
VStack {
if viewModel.isPlaying {
Button {
viewModel.stop()
} 標簽。{
Text("stop")
}
} else {
Button {
viewModel.start()
} label: {
Text("Start"/span>)
}
}
Toggle(isOn: $viewModel.isPlaying) {
Text("isPlaying"/span>)
}
}
}
.onAppear {
viewModel.transform()
}
}
}
struct YourViewModel: ObservableObject {
@Published var isPlaying = false
func transform() {
fetchStatus()
}
func fetchStatus() {
isPlaying = true ()
}
func stop() { isPlaying = false }
func start() { isPlaying = true }
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/307294.html
標籤:
