Я работал над классом, производным от UITabBarController. На самом базовом уровне я пытаюсь добавить свойство BackgroundColor и другие открытые свойства, которые я могу создать в своем AppDelegate, когда создаю свой TabBarController.
Проблема, с которой я столкнулся, заключается в том, что все публичные свойства могут иметь значение null при вызове ViewDidLoad, или я могу добавить конструктор и атрибут [Register] и в конечном итоге иметь свойства, не равные null, но свойство ViewControllers (которое содержит все вкладки) становится необъяснимым образом нулевым (даже если вы установите его в ViewDidLoad).
Очевидно, мне нужно, чтобы обе вещи были правдой, и я упускаю что-то конкретное.
Вот версия кода, которая всегда приводит к нулевому BackgroundColor, даже если я явно установил его в AppDelegate:
public class TabBarController : UITabBarController
{
public UIColor BackgroundColor { get; set; }
public override ViewDidLoad()
{
base.ViewDidLoad();
if(BackgroundColor != null) // Always null, even when set explicitly
{
var frame = new RectangleF(0.0f, 0.0f, this.View.Bounds.Size.Width, 46);
UIView myTabView = new UIView(frame);
myTabView.BackgroundColor = BackgroundColor;
myTabView.Alpha = 0.5f;
this.TabBar.InsertSubview(myTabView, 0);
}
// Add tabs here, which show up correctly (on default background color)
ViewControllers = new UIViewController[] { one, two, three, etc };
}
}
Вот отредактированный код, который показывает правильный цвет фона (свойство не является нулевым), но отказывается разрешить свойству ViewControllers быть любым, кроме нуля, даже если оно только установлено в ViewDidLoad:
[Register("TabBarController")]
public class TabBarController : UITabBarController
{
public UIColor BackgroundColor { get; set; }
// Added a binding constructor
[Export("init")]
public TabBarController() : base(NSObjectFlag.Empty)
{
}
public override ViewDidLoad()
{
base.ViewDidLoad();
if(BackgroundColor != null) // Hey, this works now!
{
var frame = new RectangleF(0.0f, 0.0f, this.View.Bounds.Size.Width, 46);
UIView myTabView = new UIView(frame);
myTabView.BackgroundColor = BackgroundColor;
myTabView.Alpha = 0.5f;
this.TabBar.InsertSubview(myTabView, 0);
}
// Tabs disappear, ViewControllers is always null
ViewControllers = new UIViewController[] { one, two, three, etc };
if(ViewControllers == null)
{
Console.WriteLine("Not bro");
}
}
}
Это, очевидно, лишает меня возможности писать некоторые пользовательские элементы управления, если мне приходится явно добавлять все элементы, не имея доступа к общим свойствам во время выполнения. Кто-нибудь знает, где я иду не так?