标签: editmode

SwiftUI 中的条件 onTapGesture

MyView我有一个导航链接,当根据编辑模式(或任何其他条件)点击其标签 ( ) 时,我需要不同的行为:

  1. 如果我们处于编辑模式,我想触发导航链接并显示DetailView所选模型。
  2. 如果我们处于编辑模式,我不想触发导航链接并EditingView在模式表中显示 。

这是我想出的一种实现方法:

NavigationLink(tag: model, selection: $displayedItem) {
    DetailView(model: model)
} label: {
    if editMode == .active {
        MyView()
            .onTapGesture {
                editingModel = model
            }
    } else {
        MyView()
    }
}
.sheet(item: $editingModel) { model in
    EditingView(model: model)
}
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是 if- 和 else- 分支中的视图具有不同的类型(由于修饰符onTapGesture),并且 SwiftUI 不会将它们识别为相同的视图。因此,动画无法插值并且无法正常工作。此外,每次切换MyView时总是会丢失其状态。editMode

(Chris Eidhof 对为什么会发生这种情况做了很好的解释:https://www.objc.io/blog/2021/08/24/conditional-view-modifiers/

所以我继续将 if 语句移动到onTapGesture修饰符内,如下所示,这样我就不会有两个不同的MyViews:

NavigationLink(tag: model, selection: $displayedItem) { …
Run Code Online (Sandbox Code Playgroud)

editmode ios swift swiftui swiftui-navigationlink

5
推荐指数
1
解决办法
3623
查看次数

editmode中的单元格不会在C#中触发OnKeyDown事件

我已经制作了自己的datagridview控件,其中包含ovveride OnKeyDown事件:

public partial class PMGrid : DataGridView
{
    protected override void OnKeyDown(KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            e.SuppressKeyPress = true; //suppress ENTER
            //SendKeys.Send("{Tab}"); //Next column (or row)
            base.OnKeyDown(e);
        }
        else if (e.KeyCode == Keys.Tab)
        {
            base.OnKeyDown(e);
            this.BeginEdit(false);
        }
        else
        {
            base.OnKeyDown(e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我点击datagridview并按Enter键时,它工作正常,因为行未更改且触发了KeyUp事件.但是当我按Tab键时,选择了下一个单元格并将其更改为EditMode.当我在这个单元格中按Enter键时,KeyUp事件不会被触发,KeyPress也会被触发.我尝试这样做,用户可以从一个单元格移动到下一个单元格,然后用户可以在此单元格中写入内容,然后当用户按Enter键时,此值将保存到数据库中.但是当单元格在EditMode中时,我无法检测到该用户按Enter键.

谢谢

c# datagridview editmode winforms keyup

4
推荐指数
1
解决办法
8677
查看次数

在编辑模式下隐藏UITableView多重选择中的复选标记

我有一个UITableView在编辑模式下使用以下行自动设置多个选择viewDidLoad:

self.tableView.allowsMultipleSelectionDuringEditing = YES;
[self setEditing:YES animated:YES];
Run Code Online (Sandbox Code Playgroud)

但是,我想通过更改其背景颜色来指示选择行,而不是通过自动显示在每行左侧的复选标记来选择.(例如,在邮件应用程序中编辑电子邮件列表时出现的,或在此SO问题中讨论的那些.)我已经在大多数情况下工作了,除了我无法获得这些复选框,自动创建作为UITableView进入编辑模式的一部分,走开.

以下是我正在使用的代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return _Hierachy.cellCount;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *testCell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if(testCell == nil) {
        testCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }
    [[testCell textLabel] setText:@"Test Cell"];

    return testCell;
}
Run Code Online (Sandbox Code Playgroud)

这是UITableView我到目前为止唯一的方法,所以其他一切都应该是默认行为.

在编辑模式下,是否有人知道如何在左侧隐藏这些复选标记?我在单元的附件部分看到了很多关于复选标记的问题,但据我了解,这是另一回事.我也看到人们谈论这个tableView:didSelectRowAtIndexPath:方法,但是当表进入编辑模式时会创建这些复选标记,当用户点击"完成"时会关闭这些复选标记,因此该方法似乎不相关.

我最接近的是找到这种方法:

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath{
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

但这只是防止单元格的内容缩进,以便为复选标记腾出空间.复选标记仍然出现.

当然有一种隐藏这些复选标记的方法,并且仍然允许在编辑模式下进行多项选择?或者,UITableView在启用了多个选择的编辑模式下,这些检查标记是否是严格的强制行为?

编辑: …

editmode uitableview ios

4
推荐指数
1
解决办法
4513
查看次数

如何在leaflet.draw编辑模式中设置divicons的样式?

使用leaflet.draw,我实例化drawControl I:

scope.drawOptions = {
  position: 'topright',
  draw: {
    polyline: false,
    polygon: {
      icon: new L.DivIcon({
        iconSize: new L.Point(16, 16),
        className: 'leaflet-div-icon leaflet-editing-icon my-own-class'
      }),
      allowIntersection: false,
      drawError: {
        color: '#5878B8',
        message: '<strong>Oh snap!<strong> you can\'t draw that!' 
      },
      shapeOptions: shapeOptions
    },
    circle: false, // Turns off this drawing tool
    rectangle: false,
    marker: false
  },
  edit: {
    featureGroup: self.featureGroup
  }
};
scope.drawControl = new L.Control.Draw(scope.drawOptions);
map.addControl(scope.drawControl);
Run Code Online (Sandbox Code Playgroud)

但进入编辑模式时,样式将恢复为"默认".我尝试用以下方法解决这个问题

map.on('draw:editstart', function(e) {
  scope.drawControl.setDrawingOptions({
    polygon: {
      icon: new L.DivIcon({
        iconSize: new L.Point(16, 16), …
Run Code Online (Sandbox Code Playgroud)

icons editmode draw leaflet

4
推荐指数
1
解决办法
1657
查看次数

如何在 SwiftUI 中检查 EditButton/EditMode 状态

我有以下测试代码。但是,当点击编辑按钮时,文本不会改变。我找不到任何相关信息。如何检查/控制editButton/editMode状态变化?

struct TestView: View {
    @State private var list = [1,2,3,4,5]
    @State private var selection = Set<Int>()
    @Environment(\.editMode) var mode
    
    var body: some View {
        NavigationView {
            List(selection: $selection) {
                ForEach(list, id: \.self) { item in
                    Text("\(item)")
                }
            }
            .toolbar {
                ToolbarItem(placement: .navigationBarLeading) {
                    EditButton()
                }
                ToolbarItem(placement: .navigationBarTrailing) {
                    if mode?.wrappedValue.isEditing ?? false {
                        Text("Editing")
                    } else {
                        Text("Not Editing")
                    }
                }
            }
        }  
    }
}
Run Code Online (Sandbox Code Playgroud)

editmode environment-variables swift swiftui

2
推荐指数
1
解决办法
2189
查看次数