Да, легко.
Вам необходимо создать подкласс из NSTextFieldCell
, который фактически является типом ячейки, используемой NSTableView
для отображения текста.
Создание подкласса класса создает новую версию этого класса, которая делает все то же, что и исходный класс, плюс еще.
Это использует Xcode 4. Если вы используете Xcode 3, дайте мне знать.
В Xcode создайте новый файл, выбрав Файл> Новый> Новый файл ...
![New File](https://i.stack.imgur.com/X4dig.png)
В всплывающем листевверх выберите Objective-C Class и нажмите Next .
![Objc class](https://i.stack.imgur.com/Mmjxp.png)
Makeэто подкласс NSTextFieldCell
, который мы будем делать модифицированной копией.Нажмите Далее .
![subclass](https://i.stack.imgur.com/IFEQo.png)
Вы можете сохранить его как угодно, но для целей этого урока сохраните его как MyDiagonalLinedTextFieldCell .Нажмите Сохранить .
![saving](https://i.stack.imgur.com/YDsra.png)
Должны появиться два новых файла.
![files](https://i.stack.imgur.com/mCdrp.png)
Нажмите на файл .m .Это файл реализации, который сообщает, что делают методы в классе.Его содержимое должно быть таким, как показано ниже:
//
// MyDiagonalLinedTextFieldCell.m
// CustomCell
//
// Created by spudwaffle on 7/4/11.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import "MyDiagonalLinedTextFieldCell.h"
@implementation MyDiagonalLinedTextFieldCell
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
@end
Ниже метода init
добавьте метод drawInteriorWithFrame: inView:
.Приложение вызывает метод drawInteriorWithFrame: inView:
каждый раз, когда ячейка должна отображаться на экране.
Ваш код должен выглядеть следующим образом:
@implementation MyDiagonalLinedTextFieldCell
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
}
@end
Первое, что вам нужно сделать, это простонарисовать стандарт NSTextFieldCell
.Это можно сделать, вызвав:
[super drawInteriorWithFrame:cellFrame inView:controlView];
Это рисует нормальный NSTextFieldCell
в той области, в которой программа этого хочет.
Теперь нам нужно нарисовать наши пользовательские линии.Давайте разместим их на 5 пикселей друг от друга и сделаем их шириной 1 пиксель.Это вызывает for
цикл!
for (int i = 0; i < cellFrame.size.width/5; i ++) {
}
Это делает int
равным 0
, прибавляет к этому счету каждый раз, когда цикл выполняется, и останавливается, когда i
достигает значениялинии, которые нужно нарисовать.
Затем введите код рисования для рисования линий.
for (int i = 0; i < cellFrame.size.width/5; i ++) {
NSBezierPath *path = [NSBezierPath bezierPath];
[path moveToPoint:NSMakePoint(i * 5, cellFrame.origin.y)];
[path lineToPoint:NSMakePoint((i * 5) + 2, cellFrame.origin.y + cellFrame.size.height)];
[[NSColor grayColor]set];
[path setLineWidth:1];
[path stroke];
}
This:
- Создает
NSBezierPath
, который используется для рисования линий и фигур. - Перемещает начало пути к нижнему краю ячейки.
- Рисует линию к верхнему краю ячейки.
- Устанавливает цвет рисунка на серый.
- Устанавливает ширину линии рисунка на
1
. - Рисует линию.
Это повторяется идля каждой строки благодаря циклу for
.
Вот заполненный файл MyDiagonalLinedTextFieldCell.m
.Вам пока не нужно беспокоиться о .h
.
#import "MyDiagonalLinedTextFieldCell.h"
@implementation MyDiagonalLinedTextFieldCell
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
[super drawInteriorWithFrame:cellFrame inView:controlView];
for (int i = 0; i < cellFrame.size.width/5; i ++) {
NSBezierPath *path = [NSBezierPath bezierPath];
[path moveToPoint:NSMakePoint(i * 5, cellFrame.origin.y)];
[path lineToPoint:NSMakePoint((i * 5) + 2, cellFrame.origin.y + cellFrame.size.height)];
[[NSColor grayColor]set];
[path setLineWidth:1];
[path stroke];
}
}
@end
Теперь нам нужно установить ячейки в табличном представлении, чтобы использовать этот класс.
Нажмите наваш MainMenu.xib
файл.Нажмите на ячейку в строке представления таблицы, пока она не станет синей.
![blue cell](https://i.stack.imgur.com/6PSPT.png)
Затем нажмите кнопку на правой боковой панели, которая выглядит следующим образом: ![button](https://i.stack.imgur.com/dxNK1.png)
Измените Класс на MyDiagonalLinedTextFieldCell
и нажмите Enter.
![class change](https://i.stack.imgur.com/4DP9n.png)
Теперь нажмите Run и наслаждайтесь фруктамивашего труда!
![custom cell window](https://i.stack.imgur.com/Jp6vC.png)
Запутайтесь в коде чертежа, пока не получите точный вид линий, которые вы хотите.
Не стесняйтесь обращаться ко мне с любыми вопросами.