2010-01-11 3 views
15

Я новичок в разработке MonoTouch и iPhone. У меня есть мои изображения (PNG) в папке ресурсов в MonoDevelop, однако, если я хочу установить свойство изображения для кнопки в Interface Builder, как мне это сделать? Это всегда пустое раскрывающееся меню. Нужно ли мне использовать XCode для доступа к XIB-файлу, а затем каким-то образом вставить файл образа кнопки, который мне понадобится?Изображения в интерфейсе Builder при использовании MonoTouch

+0

Я ничего не знаю о monotouch, но, по моему опыту, для интерфейса Builder для «просмотра» файла изображения файл должен быть частью одного и того же проекта Xcode, частью которого является файл xib. Фактически вы не вставляете файл изображения в xib-файл, но загрузчик nib обычно может загружать только ресурсы из набора приложений, а когда вы добавляете изображение в проект Xcode, он добавляется как файл, который будет находиться в построенный пакет приложений. Поэтому IB ожидает, что ресурсы проекта Xcode будут действительными файлами для ссылки в файлах nib (xib), поскольку у него есть уверенность, что они будут там во время выполнения. – Nimrod

ответ

11

This is a known limitation of MonoDevelop and Interface Builder. Чтобы добавить изображения в XIB в Interface Builder, они должны быть частью проекта XCode, и, конечно, из MonoDevelop они не являются.

Для достижения того, что вы пытаетесь сделать, вам необходимо установить изображение с помощью кода и убедиться, что для действия сборки вашего изображения установлено значение Контент. Для этого просто щелкните правой кнопкой мыши изображение внутри MonoDevelop и выберите «Построить действие»> «Содержимое».

На ваш взгляд с помощью кнопки на нем создайте розетку в интерфейсе Builder для своей кнопки, подключите ее, затем из кода для установки изображения вам просто нужно использовать .FromFile («путь/имя») метод UIImage.

UIImage buttonImage = UIImage.FromFile ("resources/image.png"); 
myButton.SetBackgroundImage (buttonImage,UIControlState.Normal); 

Это не в моей голове, но я думаю, что это нужно делать.

+2

Вы все еще можете установить изображение в Interface Builder, они просто не появятся в IB во время редактирования. Добавьте изображение в корневую директорию в моноточе, установите как содержимое, как указано выше, а в IB установите изображение в «myimage.png». Во время редактирования вы увидите вопросительный знак, но во время выполнения появится изображение. –

+0

проголосуйте за отличный ответ. – bharath

5

Вы можете вручную установить изображение в Interface Builder, но оно не появится до времени выполнения. Название изображения может включать в себя путь, например. "Изображения/settings.png".

3

Я также нуждался в этом, чтобы работать, вот обходной путь, который я нашел. Вам нужно создать проект dummy xcode. Поместите его в ту же папку, что и ваш проект. Добавьте все ваши xib-файлы и файлы изображений в этот проект xcode, перетащив их, когда проект открывается в xcode. Теперь вы сможете просмотреть предварительный просмотр изображений. Файлы изображений должны находиться в той же папке, что и файл проекта, и xcode должен быть открыт с помощью фиктивного проекта при открытии конструктора интерфейса. Не очень - но решает проблему пока. Here - образец проекта, который я создал.

Чтобы решить эту проблему на стороне MonoDevelop, необходимо создать некоторый код взаимодействия между процессами, я думаю, что хорошей отправной точкой будет поиск «PBXProjectWatcherServerConnection-3.1.2» в google.

+0

Это работает ... вроде. Когда я выбираю изображение в построителе интерфейса, он просто использует непосредственное имя изображения и игнорирует путь к файлу. Если я добавлю путь к файлу в построителе интерфейса, изображение вернется к вопросительному знаку. Есть ли способ заставить его работать с дорогой? –

4

Все приведенные здесь решения являются совершенно неправильными и вводящими в заблуждение. Все, что вам нужно сделать, - разместить изображения в папке «Ресурсы» (в корне проекта) и добавить изображения в эту папку. После добавления файлов в эту папку отметьте все файлы и убедитесь, что для их действия сборки установлено значение BundleResource.

+0

Эта функция была добавлена ​​в 2012, поэтому предыдущие ответы были правильными, но теперь устарели. См. Здесь ответ разработчика на тот же вопрос: http://stackoverflow.com/a/11493599/66131. Во всяком случае, ваш ответ работал отлично, так что спасибо! –

Смежные вопросы