在表视图中选择特定行时,如何导航到视图控制器

本文关键字:视图 导航 何导航 控制器 选择 | 更新日期: 2023-09-27 18:26:57

我有一个导航控制器。在里面我有一个视图控制器,它有一个按钮。单击该按钮后,将显示一个弹出窗口,其中包含项目的表视图。

当选择一个项目时,我想导航到另一个视图控制器,或者在当前视图控制器的顶部打开一个视图控件。

我希望我已经明确了我的目标。

以下是我当前的代码:

private 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;
            }
        }

在表视图中选择特定行时,如何导航到视图控制器

在单点触控中,您应该使用

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

我还建议您使用monotouch.dialog

在表源中声明一个事件,如下所示:

  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
    }
 }

检查此函数中单击的行:

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

然后显示您的视图控制器。

这将完成任务:

- (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];
}

单声道中的类似内容:

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中,只有语法有点不同。下次试着自己做,很容易。