Я разрабатываю с помощью IB конкретную кнопку (с некоторыми ярлыками, и с ImageView и т.д.).
Я бы хотел использовать этот объект xib (кнопка) в другом xib, где у меня есть 6 объектов этой кнопки.
Я знаю, что могу сделать это программно, используя идентификатор класса, но тогда я должен поместить свои таблицы и изображения, а также установить значения по умолчанию и все остальное в коде.
Мне интересно, можно ли делать то же самое, используя только IB? (конечно, я бы все равно установил значения в коде, но я хочу, чтобы позиции lables/imageView и все остальные были установлены в xib)
Спасибо
Edit
Итак, я понимаю, что я просил сначала, невозможно. Теперь я пытаюсь сделать следующее:
Я создал ButtonTest.xib
.
Внутри Xib у меня есть UIView и 3 subviews (2 таблицы и кнопка).
В инспекторе я установил класс UIView ButtonTest
.
Внутри ButtonTest.m У меня есть 3 выхода для каждого из подзонов, которые я подключаю в IB.
Далее у меня есть ButtonTestViewController.xib
.
Внутри я положил один вид и установил его в инспекторе как ButtonTest
.
Я подключаю этот вид к выходу myTextView
внутри ButtonTestViewController.m
класса ButtonTest
Теперь это код внутри ButtonTestViewController.m viewDidLoad:
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"ButtonTest" owner:nil options:nil];
ButtonTest *mainView = (ButtonTest*)[subviewArray objectAtIndex:0];
self.myTextView = mainView;
}
То, что я надеялся, будет состоять в том, что представление в ButtonTestViewController.xib станет представлением, которое я создал в ButtonTest.xib. Этого просто не происходит. происходит то, что вид внутри ButtonTestViewController.xib остается прежним.
Стоит отметить, что если я добавлю:
[self.view addSubview:mainView];
Он добавляет новый вид, помимо существующего.
Любая идея, как сделать то, что я хочу?
В конце концов я хотел бы иметь 6 представлений в ButtonTestViewController.xib
, все будут выглядеть как шаблон ButtonTest.xib, а значения lables будут установлены в коде.
Edit2
Хорошо, ребята, я сделал все, что вы сказали, и это сработало как шарм.
Единственная проблема, с которой я столкнулся сейчас, заключается в том, что представление в ButtonTestViewController.xib
немного больше, чем представление в ButtonTest.xib
.
Когда это произойдет, маска на кнопке выглядит чрезвычайно размытой.
Когда они имеют одинаковый размер, все это хорошо.
@Ned - я использовал точный код, который вы разместили в моем методе InitWithCoder, за исключением того, что я переключил предложение фрейма на это:
self.bounds = mainView.frame;
Я пробовал играть в режиме контента в IB, пытаясь исправить его, но безрезультатно.
Когда я использую его, как вы разместили, что означает:
mainView.frame = self.bounds;
Он не работает вообще, и размеры обоих представлений остаются неизменными. Здесь я попытался сыграть с resizeMask, но все равно не работал.
И идея, как исправить эти 2 проблемы? Спасибо, ребята!
Изменить 3
Мне удалось исправить одну из проблем, изменив размер представления ButtonTestViewController.xib
на ButtonTest.xib
.
Это то, что я сделал (используя код для устранения размытой проблемы, взятой из здесь)
self.bounds = CGRectMake(0, 0, mainView.frame.size.width, mainView.frame.size.height);
CGRect overlay2Frame = self.frame;
overlay2Frame.origin.x = round(overlay2Frame.origin.x);
overlay2Frame.origin.y = round(overlay2Frame.origin.y);
self.frame = overlay2Frame;
Другая проблема, которую я до сих пор не могу решить. представление в ButtonTest.xib просто не станет больше, чтобы соответствовать другому представлению.