Как создать экземпляр NSObject в файле .xib построителя интерфейса

StackOverflow https://stackoverflow.com/questions/950587

Вопрос

Привет,

У меня есть проект приложения на основе представлений, в котором я создал класс NSObject под названием «SquareClass».Теперь из построителя интерфейса Xcode я хочу иметь возможность создать экземпляр этого «SquareClass» в квадратный объект с глобальной областью действия таким образом, чтобы при создании действий из любых элементов управления пользовательского интерфейса (например, текстовых полей, кнопок и т. д.) ), я хочу иметь возможность вызывать методы этого объекта внутри этих действий.

пример:

(void)MyAction1:(id)color
{
   [square setColor:color];
}

(void)MyAction2:(id)width
{
   [square setWidth:width];
}

Как видите, квадратный объект должен иметь глобальную область видимости.Некоторым из нас это может показаться простым или, возможно, неправильным способом сделать это.Я просмотрел Интернет и нашел способ использовать файл .nib, а не файл .xib.

Любое предложение будет с благодарностью оценено.Большое спасибо.

Йоханн.

пс:Это мой первый пост, будьте снисходительны.

Это было полезно?

Решение

Во-первых, файл NIB по сути идентичен файлу XIB;это просто скомпилированная версия файла XIB.

Теперь, чтобы создать объект, производный от NSObject, в вашем NIB/XIB, просто перетащите NSObject из окна библиотеки в ваш файл.Затем в Identity Inspector измените класс на свой собственный класс.

Если вы определяете такие методы:

- (IBAction)myAction:(id)sender

вы сможете подключить их в Interface Builder.

С учетом всего этого трудно сказать, правильно ли то, что вы делаете, вообще.Мне кажется, вам следует использовать подкласс NSViewController, поэтому посмотрите документацию по этому поводу.

Вы также должны убедиться, что понимаете, что такое объекты представления, контроллера и модели.Об этом есть много литературы.

Другие советы

Если вы создаете класс, расширяющий UIView, вы можете заставить владельца файла для вашего xib реализовать расширенный класс.С этого момента просто добавьте переменную экземпляра в свой расширенный класс для квадрата.Последним шагом в этом процессе является добавление в класс методов для привязки каждого элемента управления к действиям.

- (IBAction) pinSelected: (id)sender;

Как только вы создадите эти методы (обязательно заставьте их возвращать IBAction, на самом деле это псевдоним void, но действует как подсказка для INterface Builder), вы можете привязать свои элементы управления к методу через File's Owner (используя control + перетаскивание, чтобы установить связь).

Удачи!

Я нашел, как сделать то, что мне нужно, чего НЕ делается в файле XIB.Это намного проще, чем я думал, хотя приведенные выше предложения ДЕЙСТВИТЕЛЬНЫ.

Чтобы использовать квадратный объект, мне просто нужно было сослаться на файл заголовка:

 #import "square.h"

в SquareUIViewController.h и добавьте ссылку на квадратный объект:

Square *square;

Затем в SquareUIController.m мне просто нужно выделить/инициализировать квадратный объект, прежде чем делать что-либо еще:

(IBAction)myInit
{
square = [[Square alloc] init];
}

Теперь я могу использовать методы первого поста и вуаля!

пс:критики, зажигайте!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top