gpt4 book ai didi

objective-c - 如何更改 IBAction 中 NSMatrix 的选择?

转载 作者:行者123 更新时间:2023-12-03 16:54:46 24 4
gpt4 key购买 nike

我的 NSRadioModeMatrix 有 3 个单元。 - (IBAction) EnableProxy:(id)inSender 连接到 NSRadioModeMatrix

- (IBAction) EnableProxy:(id)sender
{

if ([[sender selectedCell] tag]==2)
{

/*(gdb) p (int)[[inSender selectedCell] tag]
$1 = 2*/
if (condition) {
// select cell with tag 0
[sender selectCellAtRow:0 column:0]; // This is not working
}
/*(gdb) p (int)[[inSender selectedCell] tag]
$2 = 1*/
}
}// selection is not visible

当条件为真时。选择将返回到标签 2(旧选定的单元格)。 Sample project .

最佳答案

说实话,这是预期的行为,并且有充分的理由。

enter image description here

鉴于上述 UI,如果用户单击 C,他们期望 C 被选中。相反,如果用户单击 C 并且选择了 A,则您的用户会感到困惑(并且可能会感到沮丧)。事实上,实现此类行为违反了 OS X Human Interface Guidelines for Radio Buttons .

也就是说,我将继续讨论如何实现您想要的行为。基本上,当您选择 C 时,立即调用 select A 似乎没有成功的原因是,从技术上讲,C目前仍在选拔过程中。换句话说,事件的简化时间表如下所示:

  1. 开始点击矩阵
  2. EnableProxy:调用方法
  3. 矩阵立即被告知选择A
  4. 完成点击矩阵,C 终于被完全选中

为了获得您想要的结果,您需要像以下代码一样将请求“排队”,而不是立即告诉矩阵选择A:

- (IBAction) EnableProxy:(id)inSender {
if ([[inSender selectedCell] tag] == 2) {
// [mProxyEnable selectCellAtRow:0 column:0];
[self performSelector:@selector(selectFirstMatrixRow) withObject:nil
afterDelay:0.0];
}
}

- (void)selectFirstMatrixRow {
NSLog(@"[%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
[mProxyEnable selectCellAtRow:0 column:0];
}

通过使用[self PerformSelector:withObject:afterDelay:],您基本上是在说“尽快调用此方法”。这样做可以在调用该方法之前完全选择 C,从而获得您想要的结果。换句话说,事件的时间线将如下所示:

  1. 开始点击矩阵
  2. EnableProxy:调用方法
  3. 完成点击矩阵,C 终于被完全选中
  4. ---------控制返回到正常事件循环---------
  5. 调用了selectFirstMatrixRow方法
  6. 矩阵选择A

关于objective-c - 如何更改 IBAction 中 NSMatrix 的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14563679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com