SwiftUI学习记录 - 切换TabView的tab时触发震动反馈

最近在折腾iOS开发的时候,想实现在切换TabView的tab时触发震动反馈,因为一边写一边学嘛,基础不牢,只能在网上瞎搜,试了各种方法都不奏效。直到前两天看到Ice Cubes: for Mastodon的这段代码,豁然开朗。

之前写的时候,只知道给selection传一个绑定的对象,但是看完IceCubes的代码,再一看selection参数的文档,恍然大悟,这个参数要的其实是一个SelectionValue的绑定对象,所以我其实可以在这个对象的set方法上面做文章。

struct ContentView: View {
    @State
    private var selectedTab = Tab.Timeline

    var body: some View {
        TabView(selection: .init(
            get: {
                selectedTab
            },
            set: { newTab in 
                selectedTab = newTab

                // 在TabView更新selection的时候触发震动反馈就行了
                if (globalState.isHapticFeedbackEnabled) {
                    HapticsHelper.playHapticFeedback()
                }
            }
        )) {
            // Views
        }
    }
}

顺便提一嘴我之前走过的一个弯路,就是试图在TabView上用.onTapGesture()方法,结果虽然能震了,但是tab不会切换,当时还花了好长时间找怎么调用原本的.onTapGesture()来切tab,当然最后一无所获,最后认输,把震动反馈这个功能忍痛砍了......

posted @ 2026-10-07 00:40  boris1993  阅读(2)  评论(0)    收藏  举报