Как перейти к контроллеру представления, когда определенная строка выбрана в представлении таблицы? - PullRequest
1 голос
/ 05 марта 2012

У меня есть контроллер навигации. Внутри него у меня есть контроллер вида, который имеет кнопку. При нажатии кнопки появляется всплывающее окно с табличным представлением элементов.

Когда элемент выбран, я хочу либо перейти к другому контроллеру представления, либо открыть контроллер представления поверх текущего.

Надеюсь, я четко изложил свои цели.

Ниже мой текущий код:

частный UITableView tableView; личный список Список;

        private class TableViewDelegate : UITableViewDelegate
        {
            private List<string> list;

            public TableViewDelegate(List<string> list)
            {
                this.list = list;
            }

            public override void RowSelected (
                UITableView tableView, NSIndexPath indexPath)
            {

               //THIS IS WHERE I AM CURRENTLY PUTTING THE NAVIGATION CONTROLLER PUSHVIEWCONTROLLER. BUT ITS NOT WORKING !!!

            }
        }

        private class TableViewDataSource : UITableViewDataSource
        {
            static NSString kCellIdentifier =
                new NSString ("MyIdentifier");
            private List<string> list;

            public TableViewDataSource (List<string> list)
            {
                this.list = list;
            }

            public override int RowsInSection (
                UITableView tableview, int section)
            {
                return list.Count;
            }

         public override UITableViewCell GetCell (
                UITableView tableView, NSIndexPath indexPath)
            {
                UITableViewCell cell =
                    tableView.DequeueReusableCell (
                        kCellIdentifier);
                if (cell == null)
                {
                    cell = new UITableViewCell (
                        UITableViewCellStyle.Default,
                        kCellIdentifier);
                }
                cell.TextLabel.AdjustsFontSizeToFitWidth = true;
                cell.TextLabel.Font = UIFont.FromName("Helvetica", 14.0f);
                cell.TextLabel.Text = list[indexPath.Row];
                return cell;
            }
        }

Ответы [ 5 ]

1 голос
/ 07 февраля 2014

в вашем источнике таблицы объявите событие, подобное этому:

  public class TableSourceAnimales : UITableViewSource
  {
     public  event RowSelectedEventHandler RowSelectedEvent;

    public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
    {
        if (this.RowSelectedEvent != null) {
            RowSelectedEvent (indexPath);

        }

    }

  }

и в вашем контроллере uiview, как это

 namespace yournamespace

 public delegate void RowSelectedEventHandler(MonoTouch.Foundation.NSIndexPath indexpath);

 public partial class yourclass : UIViewController
 {

 public override void ViewDidLoad ()
 {
   TableViewDataSource tablelist = new TableViewDataSource (yourlist);
   table.Source = tablelist;
   table.ReloadData ();
   table.RowSelectedEvent += tablelist_RowSelectedEvent;
 }

 public void tablelist_RowSelectedEvent (NSIndexPath indexpath)
   {
        this.YourNavigationController.PushViewController(yourViewController,true);
      //or what you want to do
    }

 }
1 голос
/ 07 марта 2012

в monotouch вы должны использовать

    class TableDelegate : UITableViewDelegate
        {
            public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
            {
                this.YourNavigationController.PushViewController(yourViewController,true);
            }
}

Также я рекомендую использовать monotouch.dialog

0 голосов
/ 07 марта 2012

Примерно так в моно:

public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
            {

                var DetailViewController = new DetailViewController ();
                // Pass the selected object to the new view controller.
                controller.NavigationController.PushViewController(DetailViewController, true);
            } 

на самом деле, как в Obj-C, только синтаксис немного другой. Попробуйте сделать это сами в следующий раз, это легко.

0 голосов
/ 05 марта 2012

Это поможет:

- (void)tableView:(UITableView *)tblView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];

    YourViewController *vc  = [[[YourViewController alloc] initWithNibName:@"YourViewController" bundle:[NSBundle mainBundle]] autorelease];
    [self.navigationController pushViewController:vc animated:YES];

}
0 голосов
/ 05 марта 2012

Проверьте, какая строка нажата в этой функции:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

А затем покажите свой контроллер вида.

...