首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTokenField选择令牌

NSTokenField选择令牌
EN

Stack Overflow用户
提问于 2014-02-20 00:06:51
回答 2查看 1.5K关注 0票数 2

我得到了一个NSTokenField,通过setObjectValue:NSArray设置令牌。用定制的对象。我实现了一般的NSTokenFieldDelegate方法:

代码语言:javascript
复制
- (NSArray *)tokenField:(NSTokenField *)tokenField shouldAddObjects:(NSArray *)_tokens atIndex:(NSUInteger)index
- (NSString *)tokenField:(NSTokenField *)tokenField displayStringForRepresentedObject:(id)representedObject
- (NSTokenStyle)tokenField:(NSTokenField *)tokenField styleForRepresentedObject:(id)representedObject
- (BOOL)tokenField:(NSTokenField *)tokenField hasMenuForRepresentedObject:(id)representedObject
- (NSMenu *)tokenField:(NSTokenField *)tokenField menuForRepresentedObject:(id)representedObject
- (BOOL)tokenField:(NSTokenField *)tokenField writeRepresentedObjects:(NSArray *)objects toPasteboard:(NSPasteboard *)pboard
- (NSArray *)tokenField:(NSTokenField *)tokenField readFromPasteboard:(NSPasteboard *)pboard

当我在一个不可编辑的textfield中看到标记时,一切似乎都在工作。

由于它是一个文本字段(不可编辑),用户可以选择文本(在本例中是令牌)。当用户单击一个令牌时,它会被标记为被选中。

现在,我尝试找出所选的令牌(在鼠标向下操作后),但似乎无法从NSTokenField、NSTextField或NSControl访问该令牌。

我尝试使用tokenField.selectedCell,它给了我NSTokenFieldCell: 0x6000001c2b20,这个对象在我的选择中没有改变。当我问representedObject of selectedCell时,我得到了一个空引用。

有人知道我们如何从NSTokenField访问所选的令牌吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-20 23:15:45

选择信息位于NSTokenField的关联单元格的字段编辑器中。此代码摘录将在self.tokenField中选择的令牌打印到控制台:

代码语言:javascript
复制
NSArray *objects = [self.tokenField objectValue];
NSTextView *tv = [[self.tokenField cell] fieldEditorForView:self.tokenField];
NSArray *selections =[tv selectedRanges];

for (NSValue *rangeVal in selections) {
    NSRange range = [rangeVal rangeValue];
    for (NSUInteger i=0; i<range.length; i++) {
        NSLog(@"%@", [objects objectAtIndex:range.location + i]);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2016-02-23 02:15:14

与其使用mouseDown(_:),我发现最好使用NSTextField委托方法textViewDidChangeSelection

这是Swift中的代码。

代码语言:javascript
复制
public func textViewDidChangeSelection(notification: NSNotification) {

    if let fieldView = tokenField.cell!.fieldEditorForView(self) {

        var selectedObjects = [AnyObject]()

        for value in fieldView.selectedRanges {    
            let range = value.rangeValue

            for var i = 0 ; i < range.length ; i++ {
                selectedObjects.append(tokenField.objectValue!.objectAtIndex(range.location + i))
            }
        }
        Swift.print("selected objects:\(selectedObjects)")
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21895395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档