использование XCode с MonoDevelop, когда Custom View Controller не наследуется напрямую от UIViewController - PullRequest
1 голос
/ 29 марта 2012

Я пытаюсь использовать навигационную часть Three20. Для взаимодействия со сборками Three20 мне пришлось создать Binding Project с классами, которые связываются с классами в Three20. Одним из них является UIViewController, который имеет дополнения к UIKit UIViewController. Это означает, что мои ViewControllers должны наследоваться от этого класса, если я собираюсь использовать функции Three20 для навигации на основе URL.

Вот проблема:

Если я унаследую от Three20 UIViewController и затем попытаюсь отредактировать .xib в Xcode, MonoDevelop не создаст файлы .h и .m, необходимые Xcode для добавления Outlet и т. Д.

Кто-нибудь знает способ иметь контроллер View, который не наследуется напрямую от MonoTouch.UIKit.UIViewcontroller и доступен для редактирования в Xcode?

вот мой код:

public partial class TestViewController : TTBaseViewController
{

.......

и в отдельном проекте привязки MonoTouch:

[BaseType (typeof (MonoTouch.UIKit.UIViewController))]
interface TTBaseViewController
{   
    /**
     * Displays a controller inside this controller.
     *
     * TTURLMap uses this to display newly created controllers.  The default does nothing --
     * UIViewController categories and subclasses should implement to display the controller
     * in a manner specific to them.
     */
    [Bind("addSubcontroller:animated:transition:")]
    void AddSubcontroller(UIViewController controller, bool animated, UIViewAnimationTransition transition);

, который выдает определение класса следующим образом:

[Register("TTBaseViewController", true)]
public partial class TTBaseViewController : MonoTouch.UIKit.UIViewController {
    static IntPtr selAddSubcontrollerAnimatedTransition_ = Selector.GetHandle ("addSubcontroller:animated:transition:");
    static IntPtr selRemoveFromSupercontroller = Selector.GetHandle ("removeFromSupercontroller");
    static IntPtr selRemoveFromSupercontrollerAnimated_ = Selector.GetHandle ("removeFromSupercontrollerAnimated:");
    static IntPtr selKeyForSubcontroller_ = Selector.GetHandle ("keyForSubcontroller:");
    static IntPtr selSubcontrollerForKey_ = Selector.GetHandle ("subcontrollerForKey:");
    static IntPtr selPersistView_ = Selector.GetHandle ("persistView:");
    static IntPtr selRestoreView_ = Selector.GetHandle ("restoreView:");
    static IntPtr selSuperController = Selector.GetHandle ("superController");
    static IntPtr selSetSuperController_ = Selector.GetHandle ("setSuperController:");
    static IntPtr selTopSubcontroller = Selector.GetHandle ("topSubcontroller");
    static IntPtr selNavigatorURL = Selector.GetHandle ("navigatorURL");
    static IntPtr selOriginalNavigatorURL = Selector.GetHandle ("originalNavigatorURL");
    static IntPtr selFrozenState = Selector.GetHandle ("frozenState");
    static IntPtr selDoNavigatorGarbageCollection = Selector.GetHandle ("doNavigatorGarbageCollection");

    static IntPtr class_ptr = Class.GetHandle ("TTBaseViewController");

    [Export ("init")]
    public  TTBaseViewController () : base (NSObjectFlag.Empty)
    {
        Handle = MonoTouch.ObjCRuntime.Messaging.IntPtr_objc_msgSend (this.Handle, Selector.Init);

    }

    public TTBaseViewController (NSObjectFlag t) : base (t) {}

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

Ответы [ 2 ]

0 голосов
/ 03 апреля 2012

ок, похоже, проблема возникает при наследовании от класса, созданного в проекте связывания, и ссылки на проект связывания, а не на DLL, созданный проектом связывания. Если вы ссылаетесь на dll, файлы .h создаются нормально.

Сделать разработку / тестирование немного болезненным, хотя

0 голосов
/ 30 марта 2012

Это все еще проблема с MonoDevelop 2.8.8.3?

Это звучит как проблема, которая уже исправлена ​​в бета-версиях.

...