2013-09-21 45 views

回答

0

我想說的最好的方法是實現代理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) { 
     ; 
    } 
} 
+0

要完全拒絕添加,返回一個空數組。返回nil會導致錯誤。 –

+0

由於'[tokenField objectValue]'已經是'shouldAdd'中的新值,所以這不起作用。 – Cathy

1

我能夠去除這種方法,這誠然是一個小哈克任何重複,但它的工作原理:

// 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; 
}