Рисование линий по диагонали в определенной ячейке NSTableview - PullRequest
1 голос
/ 04 июля 2011

Есть ли способ рисовать линии по диагонали в ячейке NSTableview. Можете ли вы опубликовать образец, чтобы сделать это. Я новичок в разработке для Mac. Пожалуйста, помогите мне в этом вопросе.

Заранее спасибо .......

1 Ответ

8 голосов
/ 05 июля 2011

Да, легко.

Вам необходимо создать подкласс из NSTextFieldCell, который фактически является типом ячейки, используемой NSTableView для отображения текста.

Создание подкласса класса создает новую версию этого класса, которая делает все то же, что и исходный класс, плюс еще.

Это использует Xcode 4. Если вы используете Xcode 3, дайте мне знать.

В Xcode создайте новый файл, выбрав Файл> Новый> Новый файл ...

New File

В всплывающем листевверх выберите Objective-C Class и нажмите Next .

Objc class

Makeэто подкласс NSTextFieldCell, который мы будем делать модифицированной копией.Нажмите Далее .

subclass

Вы можете сохранить его как угодно, но для целей этого урока сохраните его как MyDiagonalLinedTextFieldCell .Нажмите Сохранить .

saving

Должны появиться два новых файла.

files

Нажмите на файл .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:

  1. Создает NSBezierPath, который используется для рисования линий и фигур.
  2. Перемещает начало пути к нижнему краю ячейки.
  3. Рисует линию к верхнему краю ячейки.
  4. Устанавливает цвет рисунка на серый.
  5. Устанавливает ширину линии рисунка на 1.
  6. Рисует линию.

Это повторяется идля каждой строки благодаря циклу 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

Затем нажмите кнопку на правой боковой панели, которая выглядит следующим образом: button

Измените Класс на MyDiagonalLinedTextFieldCell и нажмите Enter.

class change

Теперь нажмите Run и наслаждайтесь фруктамивашего труда!

custom cell window

Запутайтесь в коде чертежа, пока не получите точный вид линий, которые вы хотите.

Не стесняйтесь обращаться ко мне с любыми вопросами.

...