Я программирую приложение на Xamarin.IOS. У меня есть вкладка Layout, как для моего основного вида, и все UIElements установлены в Storyboard. Теперь, что мне нужно сделать, потому что я хочу реализовать IAds, Я хочу, чтобы мое приложение было разделенным представлением, с контроллером представления IAd в виде подробного представления и моим обычным TabbedLayout в качестве основного вида.Xamarin.IOS Добавить Splitview в приложение с вкладками
Так что, да, мой конкретный вопрос будет:
Как все моя Компоновка загружается из раскадровки: Как я могу передать экземпляр View, которая загружается обычно на мой SplitViewController?
Любые советы, которые вы можете дать, полезны, мне действительно нужно это для моей работы!
Чтобы обеспечить некоторый код:
Я пытаюсь загрузить мой первоначальный вид (который является TabBarController), как это в AppDelegate.cs:
SplitViewContoller splitView = new SplitViewContoller();
IADViewController iAdVC = new IADViewController (splitView);
Console.WriteLine ("Root" + Window.RootViewController);
Window.RootViewController = iAdVC;
Это работает отлично, за исключением того, что просмотр, который обычно появляется, не загружается ... Отображается IAD, но остальная часть экрана - пустой TabBarController.
Вот мой SplitViewController:
public class SplitViewContoller : UISplitViewController
{
UIViewController masterView, detailView;
public SplitViewContoller() : base()
{
// create our master and detail views
masterView = new TabBarController();
detailView = new IADViewController (new TabBarController());
// create an array of controllers from them and then
// assign it to the controllers property
ViewControllers = new UIViewController[]
{ masterView, detailView }; // order is important
}
public override bool ShouldAutorotateToInterfaceOrientation
(UIInterfaceOrientation toInterfaceOrientation)
{
return true;
}
}
мнение, что я хочу быть в нижней части моего экрана: (см Monotouch.Dialog and iAds подробности)
public partial class IADViewController : UIViewController
{
private UIViewController _anyVC;
private MonoTouch.iAd.ADBannerView _ad;
public IADViewController (UIViewController anyVC)
{
_anyVC = anyVC;
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
View.AddSubview (_anyVC.View);
Version version = new Version (MonoTouch.Constants.Version);
if (version > new Version (6,0))
{
try {
_ad = new MonoTouch.iAd.ADBannerView (MonoTouch.iAd.ADAdType.Banner);
_ad.Hidden = true;
_ad.FailedToReceiveAd += HandleFailedToReceiveAd;
_ad.AdLoaded += HandleAdLoaded;
View.BackgroundColor = UIColor.Clear;
_anyVC.View.Frame = View.Bounds;
View.AddSubview (_ad);
} catch {
}
} else {
Resize();
}
}
public override void DidRotate (UIInterfaceOrientation fromInterfaceOrientation)
{
base.DidRotate (fromInterfaceOrientation);
Resize();
}
public override void ViewDidAppear (bool animated)
{
base.ViewDidAppear (animated);
Resize();
}
void Resize()
{
UIView.Animate (.25,
() => {
if (_ad !=null && _ad.Hidden == false) {
_anyVC.View.Frame = new RectangleF (0, 0, this.View.Bounds.Width, this.View.Bounds.Height - _ad.Frame.Height);
} else {
_anyVC.View.Frame = View.Bounds;
}
});
if(_ad!=null)
_ad.Frame = new RectangleF (0, _anyVC.View.Bounds.Height, this.View.Bounds.Width, _ad.Frame.Height);
}
void HandleAdLoaded (object sender, EventArgs e)
{
if (_ad == null)
return;
_ad.Hidden = false;
Resize();
}
void HandleFailedToReceiveAd (object sender, AdErrorEventArgs e)
{
if (_ad == null)
return;
_ad.Hidden = true;
Resize();
}
}