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

时间:2012-03-05 08:21:09

标签: c# iphone ios xamarin.ios monodevelop

我有一个导航控制器。在它里面我有一个带按钮的视图控制器。单击该按钮时,弹出窗口会显示项目的tableview。

当选择某个项目时,我想导航到另一个视图控制器或在当前视图控制器之上打开一个视图控制器。

我希望我的目标明确。

以下是我目前的代码:

私有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 个答案:

答案 0 :(得分:1)

在monotouch中你应该使用

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

我还建议您使用monotouch.dialog

答案 1 :(得分:0)

检查此功能中单击了哪一行:

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

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

答案 2 :(得分:0)

这样可以解决问题:

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

}

答案 3 :(得分:0)

单声道中有这样的东西:

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

答案 4 :(得分:0)

在您的表源中

声明一个这样的事件:

  public class TableSourceAnimales : UITableViewSource
  {
     public  event RowSelectedEventHandler RowSelectedEvent;

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

        }

    }

  }

和你的uiviewcontroller一样

 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
    }

 }