2010-03-10 2 views
50

Я создал UIImageView с помощью Interface Bulder. Теперь я хочу разместить в нем ярлык (как его подзаголовок). В коде я могу ввести что-то вроде: [myUIImageView addSubview:myUILabel]; Но могу ли я сделать это с помощью IB? Я нашел решение для UIView, но не могу найти что-то подобное для UIImageView.Apple Interface Builder: добавление subview в UIImageView

ответ

105

Вы не можете добавить subview в UIImageView в построителе интерфейса по причинам, известным только Apple! Вы правы, говоря, что вы можете addSubview программно, но тогда накладные расходы на установку авторезистирующих масок и мест размещения подсмотров должны обрабатываться в коде, что является громоздким.

Так что есть простой способ обхода проблемы. Вместо того, чтобы перетаскивать экземпляр UIImageView в nib, просто перетащите UIView и измените его класс на UIImageView из UIView (опция cmd + 4 инспектор). Единственное отличие, которое вы обнаружите в nib для экземпляра imageView по умолчанию и вашего нового подкласса UIImageView: вы не можете установить изображение в новое изображениеView из nib (опция cmd + 1). Итак, в методе -viewDidLoad его соответствующего viewController установите изображение на эту розетку UIImageView.

Поступая таким образом, вы можете добавлять подзоны в свои экземпляры «now UIImageView» в построителе интерфейса, что очень просто.

Надеюсь, это поможет. , ,

+0

Большое спасибо за очень интересную идею (совет). – kpower

+0

Спасибо, я думаю, это так, потому что если вы что-то поместите над своим UIImageView, то это больше фоновое изображение, чем фактическое image (как в HTML, у вас есть тег , ссылающийся на фактическое изображение, которое читатель экрана «понимает», или вы можете установить фоновое изображение свойства CSS другого тега, и в этом случае изображение является только стилем, а не фактическим содержание). Но в случае iOS нет свойства backgroundImage (просто хаки, использующие backgroundColor) ... поэтому я не получаю его (и вы можете добавить subview в UIImageView непосредственно в код, как упоминалось, так что это просто глупо). – krookedking

+7

Тогда, вероятно, лучше создать UIView, поместить UIImageView в качестве подзаголовка, охватывающего все его размеры, и добавить subviews в UIView. – Sulthan

13

Я хотел бы добавить ответ.

Пока он сосет, вы не можете добавить subview в UIImageView, вы можете получить тот же эффект, добавив UIView с прозрачным (прозрачным цветом) фона.

Затем положите UIImageview ДО этого.

Таким образом, у UIView есть подземелья, а UIImageview - фон UIView.

Я думаю, что это намерение яблока.

Вот скриншот:

enter image description here

Вот результат:

enter image description here

Не забудьте установить фон, как чистый цвет

enter image description here

Теперь, если бы кто-то действительно мог указать мне на учебник, как это сделать, это будет здорово. Я потратил несколько часов на это, проверив ответ. Проверенный ответ - прекрасный ответ, но очень неинтуитивный, потому что вы не можете четко видеть свое фоновое изображение во время работы. Я считаю, что это правильный способ сделать это.

+2

Вопрос на самом деле был: могу ли я добавить прямое представление UIImageView с IB? И ответа не было. Вот почему это было отмечено как правильно. Я имею в виду, я знал обо всех ваших «подстановках» и интересовался не «каким-либо образом», а возможностью этого конкретного. Но вы идете гораздо лучше, так что upvote! – kpower

+2

А я точно не отвечаю на ваш вопрос. Но, похоже, так оно и должно быть. Благодарим за победу. –

+1

Предполагается, что UIView будет содержать другие виды. Предполагается, что UIImageView будет содержать изображение и все. Поэтому, если вы хотите использовать subview внутри UIImageView, способ сделать это будет иметь прозрачный UIView перед UIImageView. Вы можете сделать это проверенным способом, но я уверен, что яблоко должно было быть таким образом. –

-1

В последнем XCode (4.5) есть возможность перетащить необходимые элементы управления родительскому элементу.

Это довольно просто. Прикрепленный снимок экрана для того же.Я перетащил Этикетка/TextField и Button для UIImageView enter image description here

+0

++ 10 Nirav - Wow - DUH, OF COURSE! ... ваша простая техника спасла мне всю бутылку Excedrin Extra Strength! –

+7

Я не понимаю. Xcode 4.6.2 не позволит мне перетащить его в 'UIImageView', будь то на холсте или в контуре. В схеме я начинаю с 'UIImageView' и ниже на том же уровне' UILabel'. Я щелкнул левой кнопкой мыши на ярлыке и перетащил его. Xcode показывает строку, в которой 'UILabel' будет идти, если я выпущу. Очевидно, что эта строка никогда не имеет отступов: она остается на корневом уровне. Когда я выхожу, 'UILabel' может поменяться местами с помощью' UIImageView', но никогда не получает * внутри * его (с отступом ниже). Я попробовал несколько модификаторов (shift, option) без успеха. Что я упустил? –

+3

Вы не можете перетащить 'UIView' внутри' UIImageView' в 'Interface Builder' даже в' Xcode 8'. –

-4

Используйте этот код:

UIImage *image = [UIImage imageNamed:@"background.png"]; 
UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 
[self.view insertSubview:imageView atIndex:0]; 

(заменить background.png с изображением) (заменить atIndex: 0 с каким-либо место в .index root, вы хотите вставить изображение и ваше сообщение.