Мне было нужно что-то подобное в моем приложении OS X. Там они используют что-то под названием NSTokenField
, но, к сожалению, на платформе iOS нет эквивалента. Таким образом, вы в основном придерживаетесь создания собственных жетонов или использования существующих сторонних библиотек. Если вам нужна информация о том, как создавать пользовательские токены, сообщите мне.
P.S. создание пользовательских токенов требует переопределения метода drawRect
и некоторого использования путей Безье.
развернутый ответ: я покажу вам, как создать маркеры на NSTextView
(который содержит текст, но может также содержит NSTextAttachment
Кроме того, код работает на какао (но с небольшой настройки то же самое может быть достигнуто в какао. Нажмите.
1.) Создать класс, который расширяет NSTextAttachmentCell
2.) Override метод -(void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
[self drawWithFrame:cellFrame inView:controlView characterIndex:NSNotFound layoutManager:nil];
}
И реализация - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView characterIndex:(NSUInteger)charIndex layoutManager:(NSLayoutManager *)layoutManager
такова:
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView characterIndex:(NSUInteger)charIndex layoutManager:(NSLayoutManager *)layoutManager
{
NSColor* bgColor = [NSColor redColor];
NSColor* borderColor = [NSColor blackColor];
NSRect frame = cellFrame;
CGFloat radius = ceilf([self cellSize].height/2.f);
NSBezierPath* roundedRectanglePath = [NSBezierPath bezierPathWithRoundedRect: NSMakeRect(NSMinX(frame) + 0.5, NSMinY(frame) + 3.5, NSWidth(frame) - 1, NSHeight(frame) - 1) xRadius: radius yRadius: radius];
[bgColor setFill];
[roundedRectanglePath fill];
[borderColor setStroke];
[roundedRectanglePath setLineWidth: 1];
[roundedRectanglePath stroke];
CGSize size = [[self stringValue] sizeWithAttributes:@{NSFontAttributeName:defaultFont}];
CGRect textFrame = CGRectMake(cellFrame.origin.x + (cellFrame.size.width - size.width)/2,
cellFrame.origin.y + 2.f,
size.width,
size.height);
[[self stringValue] drawInRect:textFrame withAttributes:@{NSFontAttributeName:defaultFont, NSForegroundColorAttributeName: [NSColor whiteColor]}];
}
Весь код должен быть сам объяснительный, но если у вас есть какие-либо вопросы, пожалуйста, спрашивайте. Надеюсь, поможет.
Возможно, что-то вроде этого: github.com/venmo/VENTokenField? – benhameen
@benhameen, Большое вам спасибо! То, что я искал;) (Я бы поднял вас, но я не могу, поскольку у меня еще нет достаточной репутации: \) – Luke35
Уверенная вещь! И не стоит беспокоиться, комментарии с правом голоса просто эстетичны. Счастливое кодирование! – benhameen