2016-10-15 3 views
0

Я хочу открыть новый контроллер просмотра с моего первого вида, который является Table View Controller.Как открыть новый вид из события нажатия кнопки UITableViewRow?

This is View from Simulator.

Первый View Controller: TableView контроллер с Ряды. Контроллер второго взгляда: контроллер TableView, контроллер подробного просмотра для выбранной строки в первом контроллере представления таблицы.

using System; 
    using System.Collections.Generic; 
    using System.Text; 
    using Foundation; 
    using UIKit; 

    namespace TourStops.iOS { 

     class TourStopsTableSource : UITableViewSource { 
      private List<TourLib.TourStop> _stops; 
      NSString _cellID = new NSString("TableCell"); 
FirstViewController _fvc; 
      public TourStopsTableSource(FirstViewController fvc) { 
       _stops = TourLib.TourSource.GetAllTourStops(); 
_fvc = fvc; 
      } 

      public override nint RowsInSection(UITableView tableview, nint section) 
      { 
       // tell the TableView how many rows to create 
       return _stops.Count; 
      } 
      public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) { 
       TourLib.TourStop currentTourStop = _stops[indexPath.Row]; 

       var cell = tableView.DequeueReusableCell(_cellID) as TourStopTableCell; 
       if (cell == null) { cell = new TourStopTableCell(_cellID); } 


       cell.UpdateCellControlsWithTourData(currentTourStop.Name, currentTourStop.Phone); 

       #region SetupMapButton 
       string mapUrl = String.Format("http://maps.google.com/maps?q={0}+{1}", 
                        currentTourStop.Latitude, 
                        currentTourStop.Longitude); 
       cell.MapButton.TouchUpInside += delegate (object sender, EventArgs e) 
       { 
        UIApplication.SharedApplication.OpenUrl(new NSUrl(mapUrl)); 
       }; 
       #endregion 
       cell.CallButton.TouchUpInside += OpenDetailView; 

       return cell; 
      } 

      private void OpenDetailView(object sender, EventArgs e) { 
       var view = new SecondDetailController(); 
    _parent.NavigationController.PushViewController(view, true); 
      } 

     } 
    } 

Мои FirstViewController Класс:

using Foundation; 
using System; 
using UIKit; 

namespace TourStops.iOS 
{ 
    public partial class FirstViewController : UIViewController 
    { 
     public FirstViewController (IntPtr handle) : base (handle) 
     { 
     } 

     public FirstViewController() 
     { 
     } 

     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 

      TourStopsTable.Source = new TourStopsTableSource(new FirstViewController()); 
     } 
    } 
} 

Exception after following the steps of Jason.

ответ

1

Вам нужна ссылка на NavigationController. Есть несколько способов сделать это, но один общий скороговорка, когда вы создаете свой источник, передать ссылку на это родительский VC

ViewController _parent; 

public TourStopsTableSource(UIViewController parent) { 
    _stops = TourLib.TourSource.GetAllTourStops(); 
    _parent = parent; 
} 

то предполагается, что ваш родительский VC содержится в NavigationController,

private void OpenDetailView(object sender, EventArgs e) { 
    var view = new SomeDetailController(); 
    _parent.NavigationController.PushViewController(view, true); 
} 

Edit:

В вашем измененном примере выше, вы делаете

TourStopsTable.Source = new TourStopsTableSource(new FirstViewController()); 

вместо этого вам необходимо передать ссылку на УЖЕ СУЩЕСТВУЮЩИЙ VC:

TourStopsTable.Source = new TourStopsTableSource(this); 
+0

Спасибо за помощь. – Khaksar

+0

Но это не сработало для меня. Я сделал это так же, как вы сказали, но это дает исключение, детали исключения приведены ниже: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта в Navigation.Application.Main (System. String [] args) [0x00008] in /Users/Admin/Projects/TourStops/TourStops/Main.cs:12 Я обновляю свой вопрос с помощью шагов, которые вы мне сказали. Thanks, – Khaksar

+0

Можете ли вы представить рабочий пример, если у вас есть !. – Khaksar

Смежные вопросы