2017-01-28 5 views
2

私はXamarin iOSプロジェクトを行っています。私は、ボタンをクリックして、選択されたセルにリンクされた情報を表示すると、行を選択することができませんでした。このよう :Xamarin iOSの詳細をUITableviewから表示

Exemple

私はボタンをクリックしたときに、第2に、第1のコントローラからのデータを渡す方法がわかりません。どうやってやるの ?ここで

は私TableDataSourceです:

ここ
private const string cellIdentifier = "ProductCell"; 

private ProductListViewController _controller; 
private List<Product> _products; 

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
     { 
      ProductCell cell = (ProductCell)tableView.DequeueReusableCell(cellIdentifier); 

      if (cell == null) 
       cell = new ProductCell(new NSString(cellIdentifier)); 

      var record = _products[(int)indexPath.Row]; 
      cell.UpdateCell(record.Image, indexPath.Row); 
      cell.Tag = indexPath.Row; 

      return cell; 
     } 

が私の製品カスタムセルである:

public partial class ProductCell : UITableViewCell 
    { 
     public static readonly NSString Key = new NSString("ProductCell"); 

     public ProductCell(IntPtr handle) : base(handle) 
     { 
     } 

     public ProductCell(NSString cellId) 
     { 
     } 

     public void UpdateCell(string imageName, nint tag) 
     { 
      this.ProductImage.Image = UIImage.FromBundle(imageName); 
      this.MoreBtn.Tag = tag; 
     } 
} 

編集:ここでは は、ナビゲーションのために私のコードですが、私はアクションボタンの方法でそれを配置します。しかし、今、私はどこにこのメソッドを作成するか分からないために:

var storyboard = UIStoryboard.FromName("Main", null); 

      var controller = storyboard.InstantiateViewController("ProductDetailViewController") as ProductDetailViewController; 
// Here I Will pass the data to the controller 
      _controller.NavigationController.PushViewController(controller, true); 
+0

ですViewController1(製品)からViewController2(製品の詳細)へのナビゲーション – apineda

+0

@apinedaもしあなたがそれを見たいなら、私はコードを追加しました。それはあなたが既にのViewControllerのインスタンスを持っている – fandro

+0

くださいについてあなたはどう思いますか教えてくださいここ 'VARコントローラ= storyboard.InstantiateViewController ProductDetailViewControllerとして(「ProductDetailViewController」);' はそうあなたがパブリックプロパティに任意の値を割り当てたり、作成することができますあなたが値を渡してViewController内で代入を行うことができるパブリックメソッドです。 – apineda

答えて

2

GetCell--

cell.yourbtn.Tag = indexPath.Row; 
cell.getDetailButton.TouchUpInside -= handler; 
cell.getDetailButton.TouchUpInside += handler; 

ここでは、現在行っているどのボタンのイベントハンドラのコード

void handler(Object sender, EventArgs args) 
     { 
      nint tag = btn.Tag; 
var storyboard = UIStoryboard.FromName("Main", null); 

      var controller = storyboard.InstantiateViewController("ProductDetailViewController") as ProductDetailViewController; 
// datatopass = yourlistofdata[tag]; Here I Will pass the data to the controller - 
      _controller.NavigationController.PushViewController(controller, true); 


     } 
+0

ありがとうございました。私がやったようなものです。なぜGetCellメソッドで購読を中止して直接購読するのですか? – fandro

+0

複数回呼び出されるGetCellメソッド。以前に作成したオブジェクトを再利用します。セル1が上に表示され、セル6が下に表示されない場合は上にスクロールし、cell1はもう表示されないため、「tableView.DequeueReusableCell」を使用するとcell1が使用されます。 cell1ボタンにはすでにイベントハンドラがあります。そのため、複数の時間と呼ばれるイベントを削除する必要があります。それを確認したいですか?ハンドラを削除する行をコメントアウトしてから、tableviewをスクロールしてボタンをクリックすると、そのハンドラが複数回呼び出されていることが表示されます。 – Darshana

+0

OKありがとうございます – fandro

関連する問題