Как получить доступ к NavigationController.pushViewController в UITableViewSource?
Вопрос
Как я могу получить доступ NavigationController
внутри UITableviewSource
класс?
При выборе строки я хочу перейти к другой UIController
.
Это мой код,
public class RootTableSource : UITableViewSource
{
IList<VendorDetails> tableItems;
string cellIdentifier = "UIViewController";
ReportsList reportList;
AddNewReport addnewReport;
public RootTableSource()
{
}
public RootTableSource (IEnumerable<VendorDetails> items)
{
tableItems = items.ToList ();
}
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
tableView.DeselectRow (indexPath, true);
// Redirect to another UIController....
}
public VendorDetails GetItem (int id)
{
return tableItems [id];
}
}
Решение
Способ, которым я это делаю, заключается в передаче ссылки на TableViewController при создании моего исходного кода.Затем источник может использовать эту ссылку для доступа к своему родительскому NavigationController.
UITableViewController _parent;
public RootTableSource (IEnumerable<VendorDetails> items, UITableViewController parent)
{
tableItems = items.ToList ();
_parent = parent;
}
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
tableView.DeselectRow (indexPath, true);
_parent.NavigationController.PushViewController(...);
}
Другие советы
есть ли у вас экземпляр UINavigationController в AppDelegate?
подобный этому...
@property (strong, nonatomic) UINavigationController *navigationViewController;
затем вы должны получить доступ к UINavigationController из делегата AppDelegate
#import "AppDelegate.h"
@implementation yourClassName
-(void)functionName{
AppDelegate *appdelegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];
appdelegate.navigationViewController; //your UINavigationController
[appdelegate.navigationViewController pushViewController:yourUIViewController animated:YES];
}
@end
желаю помощи ~
редактировать:
Извините, я никогда раньше не пользовался Xamarin
поэтому я думаю, что это плохой способ реализации...
но, похоже, это сработало
AppDelegates.cs
[Register ("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
UIWindow window;
HomeScreen home;
public static UINavigationController navigation;
//set navigation public and static
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
window = new UIWindow (UIScreen.MainScreen.Bounds);
home = new HomeScreen ();
navigation = new UINavigationController(home);
window.RootViewController = navigation;
window.MakeKeyAndVisible ();
return true;
}
}
yourClassName.cs
AppDelegate.navigation
//access navigation
снова желаю помощи...
Не связан с StackOverflow