Как получить доступ к NavigationController.pushViewController в UITableViewSource?

StackOverflow https://stackoverflow.com//questions/23002029

  •  20-12-2019
  •  | 
  •  

Вопрос

Как я могу получить доступ 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 

снова желаю помощи...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top