2015-01-06 5 views
1

Я хотел бы достичь той же функциональности, что и в iOS. Сначала я создаю segue между viewcontroller to viewcontrollerCtrl-click и drag, после чего я использую segue identifier, чтобы достичь destinationviewcontroller.ViewController Segue Xamarin

Однако в Xamarin, если нет кнопки, вы не можете добавить segue с Ctrl-click и drag. Я хотел бы знать, есть ли способ достичь той же функциональности, что и native iOS? Я выполнил следующий учебник, но он основан на button segue, а не viewcontroller to viewcontroller segue. http://developer.xamarin.com/guides/ios/user_interface/introduction_to_storyboards/

Xamarin

public override void RowSelected (UITableView tableView, NSIndexPath indexPath) 
    { 
     UIStoryboard board = UIStoryboard.FromName ("MainStoryboard", null); 
     SecondViewController sVC = (SecondViewController)board.InstantiateViewController ("SecondViewController"); 
     ctrl.ModalTransitionStyle = UIModalTransitionStyle.CoverVertical; 
     iv.PresentViewController(sVC,true,null); 
     } 

// в IOS код

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"isDetail" sender:self]; 
} 


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 

    if ([segue.identifier isEqualToString:@"isDetail"]) { 

      SecondViewController *fVC = [segue destinationViewController]; 

    } 
} 
+0

Можете ли вы добавить исходный код, иллюстрирующий вашу проблему? –

+0

Здравствуйте, Ortomala, я обновил свой вопрос с помощью фрагмента кода. –

ответ

5

Вы можете добавить SEGUE между двумя контроллерами зрения по Ctrl-Click Инг и dragging из серой области в нижней части представления источника контроллер к контроллеру второго представления (см. изображение). Свойства для segue (например, стиль перехода) можно редактировать в панели свойств, как и любой другой элемент управления на поверхности раскадровки.

Если вы хотите использовать SEGUE, достаточно легко:

PerformSegue ("detailSegue", this); 

где detailSegue является переход идентификторов, как указано в раскадровке. Затем в PrepareForSegue сделать свою инициализацию:

public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender) 
{ 
    if (segue.Identifier == "detailSegue") { 

     SecondViewController = segue.DestinationViewController; 

     // do your initialisation here 

    } 
} 

предположительно, (глядя на примере кода), который вы хотите инициализацию для контроллера представления назначения, зависит от ряда выбранной в в виде таблицы. Для этого, вы можете добавить поле к контроллеру вида удерживать выбранную строку или «злоупотребление» параметр PerformSegue sender передать NSIndexPath через:

public override void RowSelected (UITableView tableView, NSIndexPath indexPath) 
{ 
    this.PerformSegue ("detailSegue", indexPath); // pass indexPath as sender 
} 

, а затем:

public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender) 
{ 
    var indexPath = (NSIndexPath)sender; // this was the selected row 

    // rest of PrepareForSegue here 
} 
+0

Спасибо, rdavisau, теперь я смог вывести два монитора viewcontrollers. –

+0

Похоже, вы вызываете this.PerformSegue внутри вашего UITableViewSource в выбранном ряду методе. Это, похоже, не работает для меня, this.PerformSegue недоступен, и нет смысла, чтобы класс UITableViewSource имел к нему доступ. Где вы это называете? Благодарю. – Sevren

+1

Этот код использует 'UITableViewController' (подкласс UIViewController), который поставляется с' UITableView' в корневом представлении и действует как его источник данных и делегат. Он предоставляет источники данных и делегирует обратные вызовы как «виртуальные» методы, поэтому они переоцениваются здесь, поэтому «это» на самом деле относится к экземпляру «UITableViewController». – rdavisau

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