2011-01-20 10 views
0

UIScrollViewに割り当てられたUIViewに表示されるボタンのリストがあります。最終的にUIScrollViewに追加されるUIViewにそれらを追加する前に、それぞれにTouchUpInsideイベントハンドラを割り当てます。UIButtonのEventHandlerがMonoTouchの画面要素に割り当てられない

問題は、リスト内をスクロールすると、表示可能領域の下にあるすべてのUIButtonがイベントハンドラを起動しないということです。

イベントハンドラを削除して、UIScrollViewのScrollイベントでそれらを再割り当てしようとしましたが、何も表示されませんでした。私は何が欠けていますか?

+0

いくつかのコード例が役に立ちます。 –

+0

ボタンの外観が変わりますか?おそらく彼らはイベントを取得していないでしょう。インタラクティブな要素はスクロールビューから外しておくことが常にベストです。イベント処理を複雑にする可能性があるからです。 –

答えて

1

このテストコントローラであなたのケースを再現しました。ビュー領域に該当するUIButtonは、TouchUpInsideイベントを正常にトリガします。たぶんあなたは自分のコードと比較してその違いを見ることができます。 (includeステートメントは除外されています)

public class ScrollController : UIViewController 
    { 
     UIScrollView scroll; 
     List<UIButton> buttons; 

     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 

      scroll = new UIScrollView(); 
      scroll.Frame = View.Bounds; 
      View.AddSubview(scroll); 

      scroll.ContentSize = new SizeF(0, 1000); 

      buttons = new List<UIButton>(); 
      for(int i = 0; i < 10; i++) 
      { 
       var button = CreateButton(i * 75, i.ToString()); 
       buttons.Add(button); 
       scroll.AddSubview(button); 
      } 
     } 

     UIButton CreateButton(float y, string title) 
     { 
      var button = UIButton.FromType(UIButtonType.RoundedRect); 
      button.SetTitle(title, UIControlState.Normal); 
      button.Frame = new System.Drawing.RectangleF(0, y, 200, 50); 
      button.TouchUpInside += HandleButtonTouchUpInside; 
      return button; 
     } 

     void HandleButtonTouchUpInside (object sender, EventArgs e) 
     { 
      var button = sender as UIButton; 
      Console.WriteLine("{0} touched", button.Title(UIControlState.Normal)); 
     } 
    } 
関連する問題