MyView我有一个导航链接,当根据编辑模式(或任何其他条件)点击其标签 ( ) 时,我需要不同的行为:
DetailView所选模型。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) 我已经制作了自己的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键.
谢谢
我有一个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在启用了多个选择的编辑模式下,这些检查标记是否是严格的强制行为?
编辑: …
使用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) 我有以下测试代码。但是,当点击编辑按钮时,文本不会改变。我找不到任何相关信息。如何检查/控制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)