Как добавить пользовательское представление в представление, определенное в файле XIB, в monotouch - PullRequest
9 голосов
/ 25 марта 2012

В данный момент я пытаюсь выучить monotouch и следую книге Майка Блюстейна по изучению monotouch.Неплохая книга, но она немного устарела с тех пор, как вышла xcode 4 и, как мне кажется, вышла более новая версия monotouch.

В любом случае, в моем проекте у меня есть контроллер и файл xib.У меня также есть пользовательский вид (например, myview: UIView), который переопределяет метод рисования.Я хочу показать свой пользовательский вид рядом или поверх представления, определенного в xib-файле.Как мне это сделать?

В контроллере, если я переопределил метод LoadView и установил View в качестве экземпляра моего пользовательского представления, я смогу его увидеть, но потерял все, что определено в xib-файле.,Если я попытаюсь добавить его в качестве вложенного представления, оно вообще не появится.

Что мне не хватает?Если вопрос не ясен, пожалуйста, спросите меня, чтобы я мог уточнить.

Приветствия.

Ответы [ 2 ]

22 голосов
/ 25 марта 2012

Чтобы использовать пользовательское представление в XIB, выполните следующие шаги:

Сначала украсьте представление с помощью RegisterAttribute:

[Register("MyView")]
public class MyView : UIView
{
}

и реализуйте следующий конструктор:

public MyView(IntPtr handle) : base(handle) {}

Этот конструктор необходим для случая, когда среда выполнения попытается воссоздать представление после того, как оно было уничтожено предупреждением памяти.После того, как вы создали свой пользовательский класс:

  • Откройте XIB в Xcode (всегда дважды щелкнув по нему через MonoDevelop) и добавьте UIView там, где вы хотите.
  • В Xcode установите для этого класса UIView значение MyView (или любое имя, которое вы передали RegisterAttribute):

Custom class for custom view

  • Compile-Run.

РЕДАКТИРОВАТЬ:

Не отменять LoadView для контроллеров, которые загружены из XIB.LoadView предназначено для создания представления контроллера, когда представление этого контроллера не загружено из XIB.

3 голосов
/ 24 января 2013

Спасибо, Димитрис, отличный ответ.

Для тех, кто запутался, как я, вот упрощенная процедура добавления и использования файла Xib в качестве частичного / подпредставления:

  1. Добавление нового файла Xib в MonoDevelop (т.е.LoginView.xib)
  2. Добавьте новый (частичный) класс, это будет пользовательский класс (скажем, файл Code-behind) для представления.Дайте ему любое имя "LoginView.cs")
  3. Добавьте Атрибут (RegisterAttribte) и Constrctor, как объяснил Димитрис выше.
  4. Дважды щелкните LoginView.xib, чтобы открыть его в XCode IB.Затем измените атрибут Custom Class файла xib, чтобы он указывал на ваш «файл с выделенным кодом» (т. Е. LoginView.cs)
Добавьте любые выходы или действия, если вам нужно.MonoDevelop создаст файл .designer и прикрепит его к вашему файлу с выделенным кодом, здесь вы сможете увидеть все ваши выпуски и действия.

В контроллерах, где вы хотите добавить это представление, загрузите ваш файл .xib следующим образом:

var views = NSBundle.MainBundle.LoadNib ("LoginView", this, null);LoginView loginView = Runtime.GetNSObject (views.ValueAt (0)) как LoginView;mainLayout.AddSubview (LoginView);// где mainLoyout - это placeHolder в моем главном ViewController

Эти три строки основаны на гибком ответе здесь

...