iPhone SDK: пользовательские элементы управления, как в C # - PullRequest
0 голосов
/ 19 ноября 2010

У меня есть UIViewController.UIViewController имеет NIB с одним выходом - UIView, содержащий несколько кнопок и меток.Представьте, это что-то вроде UIDatePicker.

Чтобы не заставлять копировать и вставлять весь управляющий код в новую среду, я пытался инкапсулировать UIView в отдельный подкласс UIView с собственным NIB.Это своего рода подход C # CustomControl.

Из управляющего (другого) UIViewController Я создаю экземпляр представления из NIB

NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
selectorView = (DateTimeSelectorView*)[nibObjects objectAtIndex:0];

.Проблема: "initWithFrame" моего UIView никогда не вызывается.Мой UIView покрывает все пространство (320x480), тогда как он должен иметь меньший размер.Как я могу достичь этого?Кроме того, UIView, кажется, скрывает все другие элементы управления, созданные из класса UIViewController.

С уважением

Ответы [ 2 ]

0 голосов
/ 19 ноября 2010

Итак, вот «HowTo» для вопроса: Как встроить автономный UIView в мой UIViewController с NIB?

1) Скажем, у вас есть UIView с кнопкойи текстовое поле, делая некоторые логин.У вас есть пользовательский интерфейс в отдельном NIB с именем Login.xib.Функциональность есть в Login.m и Login.h, подклассе UIView.Имя класса - «Логин».Позаботьтесь, чтобы класс был правильно установлен в Login.xib.Все в порядке.

2) Теперь вы хотите использовать это "из коробки" в новом приложении.

3) Перетащите три файла (Login.m, Login.h иLogin.xib ") в ваш новый проект на основе UIView

4) Добавьте свойство в свой класс UIViewController, указывая на ваш класс Login (конечно, сначала включите Login.h)

5) Откройте IB с помощью Login.xib и установите владельцем файла текущий класс UIViewController

6) Соедините основной вид вашего Login.xib со свойством, определенным в UIViewController (!! это важно !!)

7) Добавьте следующее в ваш viewDidLoad в UIViewController (предполагается, что ваше свойство называется «myLogin»)

[[NSBundle mainBundle] loadNibNamed:@"Login" owner:self options:nil];
myLogin.frame = CGRectMake(0 ,100, 320, 200); // Optional, you may also use the initial bounds
[self.view addSubview:myLogin];

Представление будет отображаться там, где вы его разрешаете.ваше супервизор тоже будет доступно.

Мне понадобилось несколько часов, чтобы это выяснить. Здесь и там есть разрозненная информация, но я не нашел полного "как" для этой простой задачи досейчас.

С уважением

0 голосов
/ 19 ноября 2010

Когда для экземпляра создается загрузчик пера, initWithFrame: не вызывается. Загрузчик пера вызывает initWithCoder :. Вы должны реализовать initWithCoder для выполнения любой инициализации, включая установку фрейма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...