SwiftUI 列出多个自定义行编辑选项

Posted

技术标签:

【中文标题】SwiftUI 列出多个自定义行编辑选项【英文标题】:SwiftUI list multiple custom row edit option 【发布时间】:2020-06-25 06:14:56 【问题描述】:

我需要 SwiftUI 列表的多行编辑选项

    我在 NavigationView 中的登录屏幕 登录后主屏幕是选项卡 酒吧 其中一个选项卡是列表视图(我需要为此编辑选项 列表)

这是我的总代码

第一个屏幕我只有带有文本字段和按钮的简单导航视图。

struct HomeView: View 
    
    @ObservedObject var viewModel = HomeViewModel()
    
    //@State var title = "Home"
    
    var body: some View 
        TabView(selection: $viewModel.selectedView) 
            TasksView()
            .tabItem 
                Image(“one”)
                Text(“one”)
            .tag(0)
            DashboardView()
            .tabItem 
                Image(“two”)
                Text(“two”)
            .tag(1)
            NotifcationsView()
            .tabItem 
                Image(“some”)
                Text(“some”)
            .tag(2)
            SettingsView()
            .tabItem 
                Image(“set”)
                Text("Se")
            .tag(3)
        
        .navigationBarBackButtonHidden(true)
        .navigationBarItems(trailing: EditButton())
        .navigationBarTitle(Text(viewModel.title) , displayMode: .inline)
    
    



struct TasksView: View 
    
    @ObservedObject var viewModel = TViewModel()
    @State var segmentSelection = 0
    @State var selection = Set<String>()
//    @State var editMode = EditMode.active
    
    var body: some View 
        VStack 
            Picker(selection: $viewModel.segmentSelection, label: Text("")) 
                ForEach(0..<self.viewModel.segments.count) index in
                    Text(self.viewModel.segments[index]).tag(index)
                
            .pickerStyle(SegmentedPickerStyle())
                .padding(5)
            //MyTaskListView()
            List (selection: $selection) 
                ForEach(viewModel.mt) t in
                    //TaskCell(t : task)
                    Text("Title")
                
                .onDelete(perform: viewModel.delete)
            
        .onAppear
            self.viewModel.requestMYTasks()
        
        .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading)
        
    
    
    init() 
        UISegmentedControl.appearance().selectedSegmentTintColor = Colors.navBarColor
        UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
        UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: Colors.navBarColor], for: .normal)
    
    
    

在保持简单行后,编辑也不起作用

【问题讨论】:

【参考方案1】:

EditButton 自动跟踪编辑模式,因此只需删除您的显式状态和所有工作(在复制代码上,Xcode 11.4)

//@State var editMode = EditMode.active         // remove this

List (selection: $selection) 
                ForEach(viewModel.myTasks) task in
                    TaskCell(task : task)
                
                .onDelete(perform: viewModel.delete)
//                .environment(\.editMode, self.$editMode)    // ... and this
            
.navigationBarItems(trailing: EditButton())

【讨论】:

@Prathap,您提供了所有代码吗?你使用哪个 Xcode/env?正如答案中所述,它是品尝和工作的。 我只有一个带有标签栏的屏幕和带有该列表的分段控件,仍然可以正常工作,仅此列表有问题,我已将简单的 Text("title") 替换为该自定义行,即使我有同样的问题

以上是关于SwiftUI 列出多个自定义行编辑选项的主要内容,如果未能解决你的问题,请参考以下文章

drupal 7 使用模块视图自定义行样式

UITableViewCell 的自定义行动画

Eureka:自定义行的动态高度

具有自定义行布局的 ListView - Android

xlform 使用笔尖的自定义行

由于 UITextView 中的自定义行距,文本选择不正确