В настоящее время у меня есть некоторое кодирование, которому я следовал из учебника, чтобы разрешить несколько контроллеров представления в одном представлении контейнера и использование пользовательских сегментов с идентификаторами для представления нового контроллера представления, когда выбрана строка в таблице.
Я кодирую в xamarin.ios
Теперь у меня работает выбранная часть строки, и она активирует правильную строку в моем ContainerViewController.Однако при активации PerformSegue выдается ошибка, в которой говорится, что
Возникла исключительная ситуация Objective-C.name: NSInvalidArgumentException Причина: Reciever () не имеет перехода с идентификатором 'test1'
У меня есть переход с идентификатором test1, поэтому идентификатор правильный, но все равно выдает эту ошибку.
Это учебник, которому я следовал: https://kodesnippets.wordpress.com/2015/08/11/container-view-in-ios/
Это код для ContainerViewController:
namespace PMApp
{
public partial class ContainerViewController : UIViewController
{
public ContainerViewController(IntPtr handle) : base(handle) { }
public ContainerViewController() : base("ContainerViewController", null){}
UIViewController vc;
string segueIdentifier;
UIViewController lastViewController;
public void segueIdentifireRecievedFromParent(int selectedRow)
{
ContainerViewController containerController = new ContainerViewController();
if (selectedRow == 0)
{
segueIdentifier = "test1";
PerformSegue(segueIdentifier, null);
}
else if (selectedRow == 1)
{
segueIdentifier = "test2";
PerformSegue(segueIdentifier, null);
}
}
public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender)
{
base.PrepareForSegue(segue, sender);
if (segue.Identifier == segueIdentifier)
{
if (lastViewController != null)
{
lastViewController.View.RemoveFromSuperview();
}
vc = segue.DestinationViewController as UIViewController;
AddChildViewController(vc);
View.AddSubview(vc.View);
vc.DidMoveToParentViewController(this);
lastViewController = vc;
}
}
}
}
Это класс, который обрабатывает мою таблицу и выбор строки:
namespace PMApp.Classes
{
public class TableSource : UITableViewSource
{
List<string> TableItems;
string CellIdentifier = "AreaCell";
public TableSource(List<string> items)
{
TableItems = items;
}
public override nint RowsInSection(UITableView tableview, nint section)
{
return TableItems.Count;
}
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
UITableViewCell cell = tableView.DequeueReusableCell(CellIdentifier);
string item = TableItems[indexPath.Row];
//---- if there are no cells to reuse, create a new one
if (cell == null)
{ cell = new UITableViewCell(UITableViewCellStyle.Default, CellIdentifier); }
cell.TextLabel.Text = item;
return cell;
}
public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
ContainerViewController containerController = new ContainerViewController();
containerController.segueIdentifireRecievedFromParent(indexPath.Row);
//MainViewController.PresentContainerView(indexPath.Row);
tableView.DeselectRow(indexPath, true);
}
private void newAlertView()
{
var alertController = UIAlertController.Create("Title", "Message", UIAlertControllerStyle.Alert);
alertController.AddAction(UIAlertAction.Create("back", UIAlertActionStyle.Default, null));
}
}
}
Надеюсь, кто-нибудь может помочь, везде искал решение, но просто не мог ничего найти, чтобы решить проблему.