1
如何防止重複選擇NSTokenField中的數組。我已經實現了delegate completionsForSubstring。處理NSTokenField中的重複選擇
如何防止重複選擇NSTokenField中的數組。我已經實現了delegate completionsForSubstring。處理NSTokenField中的重複選擇
我想說的最好的方法是實現代理shouldAddObjects
。將下面的代碼寫入委託中。
NSString *newVal = [[tokens objectAtIndex:0] description];
NSArray *aray = [tokenField objectValue];
for (NSString * token in aray) {
@try{
if ([token isEqual:newVal]){
return nil;
}
}
@catch (NSException *exception) {
;
}
}
我能夠去除這種方法,這誠然是一個小哈克任何重複,但它的工作原理:
// Be sure to set the delegate of your NSTokenfield either in IB or in code.
#pragma mark - NSTokenFieldDelegate
-(NSArray *)tokenField:(NSTokenField *)tokenField shouldAddObjects:(NSArray *)tokens atIndex:(NSUInteger)index{
double delayInSeconds = .1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
NSArray *aray = [tokenField objectValue];
NSOrderedSet *set = [NSOrderedSet orderedSetWithArray:aray];
aray = [set array];
[tokenField setObjectValue:aray];
});
return tokens;
}
要完全拒絕添加,返回一個空數組。返回nil會導致錯誤。 –
由於'[tokenField objectValue]'已經是'shouldAdd'中的新值,所以這不起作用。 – Cathy