我的 UI 上有一个带有 4 个按钮的 NSSegmentedControl。该控件连接到一个方法,该方法将根据单击的段调用不同的方法:
- (IBAction)performActionFromClick:(id)sender {
NSInteger selectedSegment = [sender selectedSegment];
NSInteger clickedSegmentTag = [[sender cell] tagForSegment:selectedSegment];
switch (clickedSegmentTag) {
case 0: [self showNewEventWindow:nil]; break;
case 1: [self showNewTaskWindow:nil]; break;
case 2: [self toggleTaskSplitView:nil]; break;
case 3: [self showGearMenu]; break;
}
}
段 4 在 awakeFromNib 方法中附加了一个菜单。我希望当用户单击该段时该菜单会下拉。此时,只有当用户单击并按住菜单时,它才会掉落。根据我的在线研究,这是因为关联的操作。
我目前正在解决这个问题,方法是使用一些代码来获取段控件的原点并使用 NSMenu 弹出上下文菜单popUpContextMenu:withEvent:forView
但这是相当黑客的,与将菜单下拉到分段控制单元下方的标准行为相比,看起来很糟糕。
有没有一种方法可以让菜单在单击后按应有的方式下拉,而不是执行黑客上下文菜单的操作?
子类 NSSegmentedCell,重写下面的方法,并替换 IB 中的单元类。 (不需要私有 API)。
- (SEL)action
{
//this allows connected menu to popup instantly (because no action is returned for menu button)
if ([self tagForSegment:[self selectedSegment]]==0) {
return nil;
} else {
return [super action];
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)